Go语言中处理 HTTP 服务器

1 概述

包 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。

快速开始:

运行程序,在浏览器上请求: ,你会看到我们的结果:

第一个服务器程序

Go语言构建HTTP服务器还是很容易的。深入说明。

2 http.Server 类型

HTTP 服务器在 Go 语言中是由 结构体对象实现的。参考 的实现:

可见过程是先实例化 对象,再完成 。其中 对象就是表示 HTTP 服务器的对象。其结构如下

可见 定义了服务器需要的信息。

实例化了 对象后,调用其 方法。该方法会监听 指定的 TCP 地址,并通过 方法接收浏览器端连接请求。 方法会接收监听器 l 收到的每一个连接,并为每一个连接创建一个新的服务进程。

该 go 进程会读取请求,然后调用 处理并响应。 通常会是 nil,这意味着需要调用 来处理请求,这个 是默认的路由,我们使用 就是在 上注册方法。

3 http.DefaultServeMux 默认路由对象

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

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

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

可以调用多次 来注册多个处理器。

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

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

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

4 处理器

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

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181111G00GF700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券