Go 语言 net/url 包通过 url.URL 结构体和 url.Parse() 等函数提供安全的 URL 解析与构造能力,自动解码路径和查询参数(不含 fragment),推荐检查 error;修改 Path 应用 url.PathEscape(),查询参数需通过 u.Query() 操作后 Encode() 赋值;拼接相对路径应使用 ResolveReference();编码须区分 url.PathEscape() 和 url.QueryEscape()。
Go 语言的 net/url 包提供了完整、安全的 URL 解析与构造能力,核心是 url.URL 结构体和配套的解析/编码函数。正确使用它,能避免手动字符串切割带来的错误(比如路径中含 %、/ 或查询参数含特殊字符)。
用 url.Parse() 将字符串转为可操作的对象。它会自动解码路径和查询参数中的百分号编码(如 %20 → 空格),但不会解码 fragment(# 后部分)。
url.URL 的字段(如 Scheme、Host、Path、RawQuery)可直接读取。修改时注意:
Path 前建议用 url.PathEscape() 编码,避免注入斜杠或点遍历u.Query() 获取 url.Values(本质是 map[string][]string),再用 Set/Add/Del 操作,最后赋回 u.RawQuery = q.Encode()
RawQuery,易出编码错误从零构建可用 &url.URL{Scheme: "https", Host: "api.example.com", Path: "/v1/users"},再调用 u.Strin 得字符串。
g()
baseURL.ResolveReference(relURL),比字符串拼接更可靠路径和查询参数的编码规则不同,必须区分使用:
url.PathEscape(s):对路径段编码(保留 /、: 等分隔符,只编码语义字符)url.QueryEscape(s):对查询值编码(空格→+,其余→%xx)url.PathUnescape 或 url.QueryUnescape,它们可处理多种编码变体基本上就这些。net/url 不复杂但容易忽略编码细节,坚持用结构体方法而非字符串操作,URL 处理就稳了。