Go语言HTTP服务器可直接用net/http库实现:用http.HandleFunc注册路由或http.ServeMux手动管理;通过*http.Request读取参数与JSON体,用http.ResponseWriter设置状态码、Header并返回数据。

在 Go 语言中实现一个简单的 HTTP 服务器非常直接,核心是使用标准库 net/http。你不需要额外依赖,几行代码就能启动服务、响应请求并返回数据。
用 http.HandleFunc 注册路由处理函数
这是最常用的方式:为某个路径(如 "/")绑定一个函数,当收到对应请求时自动调用。
- 函数签名必须是
func(http.ResponseWriter, *http.Request) -
http.ResponseWriter用于写入响应头和响应体 -
*http.Request包含请求方法、URL、参数、Header、Body 等信息
示例:
func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(200)
json.NewEncoder(w).Encode(map[string]string{"message": "Hello from Go!"})
})
log.Println("Server starting on :8080")
http.ListenAndServe(":8080", nil)
}
用 http.ServeMux 手动管理路由
适合需要更清晰控制或复用路由逻辑的场景。你可以创建一个独立的多路复用器,注册多个处理器,再传给 ListenAndServe。
立即学习“go语言免费学习笔记(深入)”;
- 避免全局状态,便于测试和模块化
- 可为不同路径设置不同处理器,比如
/api/users和/health
示例:
mux := http.NewServeMux()mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
w.Write([]byte("OK"))
})
mux.HandleFunc("/data", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("Static response"))
})
http.ListenAndServe(":8080", mux)
读取请求参数与解析 JSON 请求体
服务器不仅要返回数据,还常需处理客户端传来的数据。
- 查询参数用
r.URL.Query().Get("key") - 表单数据用
r.FormValue("field")(会自动调用ParseForm) - JSON 请求体:先用
ioutil.ReadAll(r.Body)(Go 1.16+ 推荐io.ReadAll),再用json.Unmarshal解析
注意:读取 r.Body 后不可重复读,若需多次使用,应提前缓存。
设置响应状态码与 Header
别只写内容,HTTP 协议要求明确状态码和类型。
-
w.WriteHeader(404)设置状态码(必须在w.Write或json.Encoder.Encode前调用) -
w.Header().Set("Content-Type", "...")设置响应头 - 常见组合:
200 + application/json、400 + text/plain、500 + application/json
如果忘记设状态码,默认是 200 OK;但显式设置更安全、语义更清晰。










