Go 用 net/http 可直接构建高性能生产级 Web 服务;几行代码即可启动简易服务器,支持自定义 ServeMux、中间件链式封装及 context 控制超时等优化。

用 Go 写 Web 服务器非常直接,标准库 net/http 就能支撑生产级 HTTP 服务,无需额外框架也能做到高性能、低内存占用和高并发处理。
从最简 HTTP 服务开始
Go 自带的 http.ListenAndServe 几行代码就能启动一个服务:
示例:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from Go!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
这段代码启动了一个监听 :8080 的服务器,所有请求都由 handler 处理。它轻量、无依赖,适合 API 快速验证或微服务基础层。
立即学习“go语言免费学习笔记(深入)”;
Destoon B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 系统特性1、跨平台。支持Linux/Unix/Windows服务器,支持Apache/IIS/Zeus等2、跨浏览器。基于最新Web标准构建,在
路由与请求处理进阶
标准库默认是全局单一多路复用器(http.DefaultServeMux),但实际项目中建议使用自定义 ServeMux 或更灵活的路由方式:
- 用
http.NewServeMux()创建独立路由实例,避免全局污染 - 支持路径前缀匹配(
HandlePrefix)和显式注册(HandleFunc("/api/users", usersHandler)) - 如需 REST 风格路由(如
/users/{id}),可引入轻量库如gorilla/mux或chi,它们不破坏标准http.Handler接口,兼容性好
中间件与请求生命周期控制
Go 的 Handler 是函数式接口,天然适合链式中间件:
- 中间件本质是包装
http.Handler的函数,返回新Handler - 常见用途:日志记录、CORS、JWT 验证、请求超时、Panic 捕获
- 写法示例(日志中间件):
func loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Printf("→ %s %s\n", r.Method, r.URL.Path)
next.ServeHTTP(w, r)
})
}
// 使用:http.ListenAndServe(":8080", loggingMiddleware(r))
性能优化关键点
Go 的 HTTP 服务默认已很高效,但要注意几个易被忽略的细节:
- 避免在 handler 中做同步阻塞操作(如未设超时的 HTTP 调用、大文件读取),改用 context 控制生命周期
- 响应体尽量用
w.Write()或json.Encoder流式写入,减少内存拷贝 - 静态资源交给
http.FileServer并启用http.StripPrefix,别自己读文件返回 - 高并发场景下,适当调整
http.Server的ReadTimeout、WriteTimeout和MaxHeaderBytes










