beego3---gohttp底层实现
package main //gohttp底层实现,通过gohttp不是通过beego实现的输出
// import (
"io"
"log"
"net/http"
) func main() {
//设置路由
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal(err)
}
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion1")
}
package main //gohttp第二个版本:通过mux,handler实现路由 import (
"io"
"log"
"net/http"
) func main() {
mux := http.NewServeMux() //ServeMux//实现handler注册到ServeMux然后在进行路由的注册
mux.Handle("/", &myHandler{}) //注册路由和handler
mux.Handle("/hello", sayHello) //通过函数注册路由 err := http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
} type myHandler struct { //这个handle要实现ServerHTTP方法 } func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
}
package main //模拟gohttp底层,第三个版本 import (
"fmt"
"io"
"log"
"net/http"
"os" //获取静态文件
"time"
) func main() {
server := http.Server{
Addr: ":8080",
Handler: &myHandler{}, //自定义handler
ReadTimeout: * time.Second,
} myMux = make(map[string]func(http.ResponseWriter, *http.Request)) //初始化map
myMux["/"] = sayHello //访问根目录调用sayHellp方法
myMux["/bye"] = sayBye //访问/bye调用sayBye方法 err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
} type myHandler struct{} func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { //handler来解析url,调用不同的方法,
if h, ok := myMux[r.URL.String()]; ok { //if ok 对map的断言,ok是判断存不存在,h是获取的map的value,
fmt.Println(h, ok)
h(w, r)
return
}
io.WriteString(w, "uuuu,"+r.URL.String())
} var myMux map[string]func(http.ResponseWriter, *http.Request) //自定义mux,根据不同的string调用不同的方法 func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello "+r.URL.String())
} func sayBye(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "sayBye "+r.URL.String())
}
package main //获取静态文件 import (
"io"
"log"
"net/http"
"os" //获取路径,静态文件服务器要获取绝对路径,根据当前路径定位到绝对路径,
) func main() {
mux := http.NewServeMux() //ServeMux//实现handler注册到ServeMux然后在进行路由的注册
mux.Handle("/", &myHandler{}) //注册路由和handler
mux.Handle("/hello", sayHello) //通过函数注册路由 wd, err := os.Getwd() //wd是当前路径
if err != nil {
log.Fatal(err)
} mux.Handle("/static/",
http.StripPrefix("/static/", http.FileServer(http.Dir(wd)))) //StripPrefix去除static前缀 err = http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
} type myHandler struct { //这个handle要实现ServerHTTP方法 } func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
}
beego3---gohttp底层实现的更多相关文章
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- Objective-C中block的底层原理
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...
- nodejs操作arduino入门(javascript操作底层硬件)
用Javascript来操作硬件早就不是一件稀奇的事情了. 所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino: 要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主 ...
- 支撑Java NIO 与 NodeJS的底层技术
支撑Java NIO 与 NodeJS的底层技术 众所周知在近几个版本的Java中增加了一些对Java NIO.NIO2的支持,与此同时NodeJS技术栈中最为人称道的优势之一就是其高性能IO,那么我 ...
- 介绍,介绍我的底层支持库 Net.Sz.CFramework
Net.Sz.CFramework 是我自己的底层库,是经过验证的底层库. 包含: socket tcp协议,socket http协议线程池,线程模型,任务模型,定时器模型,日志模块脚本模块一些辅 ...
- iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)
<分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...
- C#剪切,复制,粘贴底层应用编写
zz备用复制剪切粘贴的底层应用 /// <summary> /// 复制或剪切文件至剪贴板(方法) /// </summary> /// <param name=&quo ...
- 从PHP底层源码去深入理解数组,并用C模拟PHP关联数组(原创)
PHP是一门入门容易,使用范围广泛的语言,以其灵活性以及web后端开发被很多人熟知,也被很多人戏称“PHP是世界上最好的语言”.本人是一名“忠实”的PHPer,相信用过PHP的程序员都会体会到PHP数 ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...
随机推荐
- Conv1D和Conv2D的区别
我的答案是,在Conv2D输入通道为1的情况下,二者是没有区别或者说是可以相互转化的.首先,二者调用的最后的代码都是后端代码(以TensorFlow为例,在tensorflow_backend.py里 ...
- [Algorithm] 2. Trailing Zeros
Description Write an algorithm which computes the number of trailing zeros in n factorial. Example 1 ...
- CF792E Colored Balls
题目大意:将n个数分解成若干组,如4 = 2+2, 7 = 2+2+3,保证所有组中数字之差<=1. 首先我们能想到找一个最小值x,然后从x+1到1枚举并check,找到了就输出.这是40分做法 ...
- PHP 反射API
出处:http://blog.csdn.net/hguisu/article/details/7357421 PHP5添加了一项新的功能:Reflection.这个功能使得phper可以reverse ...
- 集训第四周(高效算法设计)O题 (构造题)
A permutation on the integers from 1 to n is, simply put, a particular rearrangement of these intege ...
- 节点回来shard仍然delayed原因
1:es2 fetch shard data时,存在节点刚加入集群,还没有收到cluster metadata的情况.此时,节点因为没有该索引,返回的sharddata为empty,主节点缓存了该sh ...
- 洛谷 P2335 SDOI 2005 毒瘤 位图(也补上注释了)
#include<iostream> #include<cstdio> #include<queue> #include<cstring> using ...
- 【02】emmet系列之HTML语法
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 初始化 :快速编写HTML ...
- Session&Cookie 的介绍和使用
Session介绍与使用 1.Session基本介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序 ...
- SecureCRT在Tab下的Title显示IP
注意:要针对每个Session进行修改才行. 参考: http://www.cnblogs.com/tyhmj/archive/2013/12/20/3483247.html