最简 HTTP 服务仅需三行代码:注册根路由、写响应、启动监听;处理 POST 须显式调用 r.ParseForm() 或 r.ParseMultipartForm() 才能获取表单值。
用 net/http 启动最简服务,别碰框架先
Go 自带的 net/http 足够跑通 90% 的轻量 HTTP 场景,没必要一上来就引入 Gin 或 Echo。一个能响应 GET / 的服务,三行代码就能跑起来:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
}
注意两点:http.ListenAndServe 默认不启用 HTTPS,端口要显式指定(":8080");nil 表示使用默认的 http.DefaultServeMux,别传空结构体或自定义 mux 却忘了注册路由。
处理 POST 请求时,必须手动调用 r.ParseForm()
Go 不会自动解析表单或 JSON body,这是新手最常卡住的地方。直接读 r.FormValue("key") 会返回空字符串,除非你先调用:
r.ParseForm() // 解析 application/x-www-form-urlencoded // 或 r.ParseMultipartForm(32 << 20) // 解析 multipart/form-data(如文件上传) // 或 json.NewDecoder(r.Body).Decode(&v) // 解析 JSON,需自己关 r.Body
常见错误包括:ParseForm 被调用多次(会 panic)、在 ParseMultipartForm 前没设 MaxMemory 导致临时文件写满磁盘、JSON 解码后没关闭 r.Body 引发连接复用异常。