贝利信息

Golang Web服务如何读取请求参数_HTTP参数解析方法

日期:2026-01-18 00:00 / 作者:P粉602998670
应优先调用 r.ParseForm() 再用 r.FormValue("q") 获取 query 参数,避免 r.URL.Query().Get() 返回空字符串或忽略重复 key;上传文件时须显式调 r.ParseMultipartForm(32

Go HTTP 服务中读取 query 参数:别直接用 r.URL.Query().Get() 就完事

query 参数(如 /search?q=go&limit=10 中的 qlimit)最常用,但 r.URL.Query().Get() 只返回第一个值,且不校验是否为空。实际开发中常因忽略重复 key 或空字符串导致逻辑错误。

从 POST 表单和 multipart 表单读参数:先调 r.ParseMultipartForm() 再取

如果前端用

提交(含文件上传),必须显式调用 r.ParseMultipartForm(),否则 r.Form 为空,r.PostFormValue() 返回空。

解析 JSON 请求体:别用 io.ReadAll 多次读 r.Body

HTTP 请求体只能读一次。r.Bodyio.ReadCloser,一旦被 json.NewDecoder(r.Body).Decode(

) 消费,后续再读就是空。常见错误是先 decode 再想 log 原始 body。

路径参数(URL path segment):用 chigorilla/mux,原生 net/http 不支持

net/httphttp.ServeMux 只支持通配符 /path/,不解析 /user/:id 这类命名参数。硬编码字符串切分易出错,也不处理 URL 解码。

路径参数和 query 参数容易混用,但语义不同:ID 类固定资源标识放 path,筛选/分页类可选条件放 query。别把 page 放 path 里,也别把 user_id 放 query 里传敏感信息。