加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

Go语言中处理 HTTP 服务器

发布时间:2018-12-15 00:41:53 所属栏目:外闻 来源:韩忠康
导读:1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: packagemain import( log net/http ) funcmain(){ //设置路由 http.HandleFunc(/,IndexAction) //开启监听 log.Fatal(http.ListenAndServe(:8888,nil)) }

看 Go 的源码,了解 http.HandleFunc():

  1. func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { 
  2.   DefaultServeMux.HandleFunc(pattern, handler) 

可以看出来,注册的函数被 DefaultServerMux 来使用了。注册的时候,需要 pattern,就是 URL 模式,以及处理该 URL 模式的函数。

DefaultServerMux 是 http.ServeMux 类型的一个默认实例,ServeMux 就是路由。其主要结构是一个映射 map,用来存储 URL 模式和相关处理函数的关系。参看源码可以看出来:

  1. type ServeMux struct { 
  2.   mu    sync.RWMutex 
  3.   m     map[string]muxEntry // 映射表 
  4.   hosts bool // whether any patterns contain hostnames 
  5. type muxEntry struct { 
  6.   h       Handler 
  7.   pattern string 

可以调用多次 http.HandleFunc() 来注册多个处理器。

URL 模式是固定的、由根开始的路径。处理器的 URL 模式匹配原则是 左侧长度优先匹配。

例如有模式 /path/article/ 和 /path/ ,如果请求的 URL 是 /path/other/ 会由 /path/ 注册的处理器来处理,而 URL 为 /path/article/42/ 会由 /path/article/ 来处理。

以斜杠结尾的模式代表一个由根开始的子树,,就是以当前为前缀的都会匹配。因此 / 会匹配所有的未被其他注册的模式匹配的路径。

4 处理器

处理器可以由函数或实现 Handler 接口的对象来充当。Handler 接口就是要求对象实现和处理器函数一致的方法。看 http.Handler 接口的实现源码:

  1. type Handler interface { ServeHTTP(ResponseWriter, *Request)} 

我们使用函数 http.HandleFunc 注册处理函数,而使用 http.Handle 函数来注册满足 Handler接口的处理对象。效果是一致的。

服务器篇完,后续还有 请求对象,响应对象 。

【编辑推荐】

  1. 如何通过Ansible来管理上千台服务器??
  2. 用 Python 快速实现 HTTP 和 FTP 服务器
  3. 中标中国人民银行,曙光八路服务器再获认可
  4. CentOS系统下PXE服务器的搭建与部署
  5. 详解X86服务器虚拟化的资源划分和性能优化
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读