作家
登录

Go语言HTTP Server源码分析

作者: 来源: 2017-04-10 15:04:23 阅读 我要评论

return false } n := len(pattern) //如不雅注册模式与请求uri一样返回true,不然false if pattern[n-1] != '/' { return pattern == path } //静态文件匹配 return len(path) >= n && path[0:n] == pattern}

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)    }    	
				
			

  推荐阅读

  Linux命令行工具使用小贴士及技巧(三)

在这个系列的第一部分,我们具体地评论辩论了 cd - 敕令,在第二部分,我们深刻商量了 pushd 和 popd 两个敕令,以及它们应用的场景。持续对敕令行的评论辩论,在这篇教程中,我们将会经由>>>详细阅读


本文标题:Go语言HTTP Server源码分析

地址:http://www.17bianji.com/lsqh/34685.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)