Go说话中HTTP Server:
HTTP server,顾名思义,支撑http协定的办事器,HTTP是一个简单的请求-响应协定,平日运行在TCP之上。经由过程客户端发送请求给办事器获得对应的响应。

HTTP办事简单实现
你认为如许就停止了吗,不才方才开端。
源码分析
http中的HandleFunc办法,重要用来注册路由
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler)}DefaultServeMux是什么?
DefaultServeMux是ServeMux的一个实例。
ServeMux又是什么?
// DefaultServeMux is the default ServeMux used by Serve.var DefaultServeMux = &defaultServeMuxvar defaultServeMux ServeMuxtype ServeMux struct { mu sync.RWMutex m map[string]muxEntry hosts bool }type muxEntry struct { explicit bool h Handler pattern string}ServeMux重要经由过程map[string]muxEntry,来存储了具体的url模式和handler(此handler是实现Handler接口的类型)。经由过程实现Handler的ServeHTTP办法,来匹配路由(这一点下面源码会讲到)
很多处所都涉及到了Handler,那么Handler是什么?
type Handler interface { ServeHTTP(ResponseWriter, *Request)}此接口可以算是HTTP Server一个枢纽
func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { mux.Handle(pattern, HandlerFunc(handler))}type HandlerFunc func(ResponseWriter, *Request)func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r)}大年夜代码中可以看出HandlerFunc是一个函数类型,并实现了Handler接口。当经由过程调用HandleFunc(),把Hello强转为HandlerFunc类型时,就意味着 Hello函数也实现ServeHTTP办法。
ServeMux的Handle办法:
这里就是之前提到的匹配路由的具体代码
func (mux *ServeMux) Handle(pattern string, handler Handler) { mux.mu.Lock() defer mux.mu.Unlock() if pattern == "" { panic("http: invalid pattern " + pattern) } if handler == nil { panic("http: nil handler") } if mux.m[pattern].explicit { panic("http: multiple registrations for " + pattern) }
推荐阅读
在这个系列的第一部分,我们具体地评论辩论了 cd - 敕令,在第二部分,我们深刻商量了 pushd 和 popd 两个敕令,以及它们应用的场景。持续对敕令行的评论辩论,在这篇教程中,我们将会经由>>>详细阅读
本文标题:Go语言HTTP Server源码分析
地址:http://www.17bianji.com/lsqh/34685.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示