Go 标准库的 net/http 提供了完整的 HTTP 服务器和客户端实现。许多流行的 Go Web 框架都构建在它之上,理解其内部原理对编写高性能 Web 服务至关重要。
HTTP 服务器架构
net/http 的 Server 为每个连接创建一个 goroutine,这是 Go 处理高并发的基础。每个请求的处理都是独立的,不会相互阻塞。
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()
中间件模式
Go 的中间件本质上是函数装饰器,将 http.Handler 包装进另一个 http.Handler:
func loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
next.ServeHTTP(w, r)
log.Printf("%s %s %v", r.Method, r.URL.Path, time.Since(start))
})
}
主流框架对比
- net/http:标准库,零依赖,适合简单 API 和微服务。
- Gin:高性能,Radix Tree 路由,丰富的中间件生态。
- Echo:极简,性能优异,内置大量中间件。
- Fiber:受 Express.js 启发,使用 fasthttp,极致性能。
理解标准库的 HTTP 设计,才能在使用框架时知其所以然。