前言
继续接入上章节的06-呜呜呜我要拿Go赢他~ 入门,基础语法type 的文章现在要学的Web 模块Server
Http Server 实现
在 Go 语言中,net/http 包提供了构建 HTTP 服务器的功能。HTTP 服务器可以处理客户端发起的请求,并返回响应。通过使用 net/http 包,可以轻松地创建出高性能、可扩展的 Web 服务。
上次我们通过几行代码就实现了 web 应用
代码语言:go复制package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Golang!")
}Web 核心
在框架对比的时候,我们注意到对于一个 Web 框架来说,至少要提供三个抽象:
• 代表服务器的抽象,这里我们称之为 Server
• 代表上下文的抽象,这里我们称之为 Context
• 路由树
在 Go 语言中,net/http 包提供了构建 Web 服务的核心功能
- HTTP 请求和响应:net/http 包定义了 http.Request 和 http.Response 结构体,分别表示客户端发起的 HTTP 请求和服务器返回的 HTTP 响应。http.Request 结构体包含了请求的方法、URL、头部、正文等信息,而http.Response 结构体包含了响应的状态码、头部、正文等信息。
- HTTP 服务器:net/http 包提供了 http.Server 结构体,用于创建和运行 HTTP 服务器。http.Server 结构体包含了服务器的地址、证书、超时设置等信息。可以使用 http.ListenAndServe 或 http.ListenAndServeTLS 函数启动 HTTP 服务器。
- 路由:net/http 包提供了简单的路由功能,可以使用 http.HandleFunc 函数为不同的路径设置处理器函数。处理器函数接收两个参数:http.ResponseWriter 和 *http.Request,分别用于向客户端写入响应和获取请求的详细信息。
- 中间件:虽然 net/http 包本身没有提供中间件功能,但可以使用第三方中间件库,如 github.com/gin-gonic/gin,为 HTTP 服务器添加额外的功能,如日志记录、身份验证等。
- TLS 支持:net/http 包支持 TLS,可以使用 http.ListenAndServeTLS 函数启动一个支持 TLS 的 HTTPS 服务器。
Server
对于一个 Web 框架来说,我们首先要有一个整体代表服务器的抽象,也就是 Server。
Server 从特性上来说,至少要提供三部分功能:
• 生命周期控制:即启动、关闭。如果在后期,我们还要考虑增加生命周期回调特性
• 路由注册接口:提供路由注册功能
• 作为 http 包到 Web 框架的桥梁
imghttp.Handler 接口
http 包暴露了一个接口,Handler。
它是我们引入自定义 Web 框架相关的连接点。
img接口定义 Version One
Server 定义:只组合 http.Handler
优点:
• 用户在使用的时候只需要调用 http.ListenAndServe 就可以
• 和 HTTPS 协议完全无缝衔接
• 极简设计
缺点:
• 难以控制生命周期,并且在控制生命周期的时候增加回调支持
• 缺乏控制力:如果将来希望支持优雅退出的功能,将难以支持
img接口定义 Version Two
Server 定义:组合 http.Handler 并且增加 Start 方法。
优点:
• Server 既可以当成普通的 http.Handler 来使用,又可以作为一个独立的实体,拥有自己的管理生命周期的能力
• 完全的控制,可以为所欲为
缺点:
• 如果用户不希望使用 ListenAndServeTLS,那么 Server 需要提供 HTTPS 的支持
img版本一和版本二都直接耦合了 Go 自带的 http 包,如果我们希望切换为 fasthttp 或者类似的 http 包,
则会非常困难。
img最后
本期结束咱们下次再见


