Go 语言标准库 net/url 可解析 URL 结构并提取查询参数,支持多值同名参数处理、HTTP 请求中直接获取、安全校验及敏感参数规避。

Go 语言 标准库 提供了强大且简洁的 工具 来解析 URL 和查询参数,无需额外依赖就能高效处理网络请求中的地址与参数数据。
使用 net/url 解析 URL 结构
Go 的 net/url 包可将完整 URL 拆解为协议、主机、路径、查询参数等部分。调用 url.Parse() 即可完成解析,失败时返回错误需检查。
- 解析后可通过 u.Scheme 获取协议(如https)
- u.Host包含主机名和 端口 (如example.com:8080),u.Path 是路径部分(如/api/users)
- 查询参数整体保存在 u.RawQuery 中,但更推荐用 u.Query() 方法获取解析后的 url.Values 映射
提取和遍历查询参数
u.Query()返回 url.Values 类型,本质是map[string][]string,支持多值同名参数(如?tag=go&tag=web)。
- 用 v.Get(“key”) 获取第一个值(适合单值场景)
- 用 v[“key”] 获取全部值切片,再手动取索引或遍历
- 用 v.Encode() 可将参数重新拼成 key=val&key2=val2 格式,常用于构造新 URL
从 HTTP 请求中直接获取查询参数
在 HTTP 服务中(如使用 http.HandleFunc),请求对象*http.Request 自带 URL 字段,可直接调用req.URL.Query()。
立即学习“go 语言免费学习笔记(深入)”;
- 注意:POST 请求的查询参数仍位于 URL 中,与请求体无关;表单数据或 JSON 需另通过 req.ParseForm() 或io.ReadAll()读取
- 若需同时处理 URL 参数和表单字段,建议先调 req.ParseForm(),之后req.Form 会合并二者(URL 参数优先级低于同名表单字段)
安全处理用户输入的 URL
解析不可信 URL 时,应始终检查 url.Parse() 返回的错误,避免空指针或异常行为。
- 对用户提交的 URL 做基础校验,例如要求u.Scheme != “” && u.Host != “”
- 避免直接拼接用户输入到 url.URL 结构中;如需构造 URL,用 url.URL{…}.String() 或url.ParseRequestURI()确保格式合法
- 敏感参数(如 token、id)不建议明文出现在 URL 中,尤其避免记录日志时泄露






























