Go中解析URL需用net/url包的url.Parse()获取*url.URL,检查错误后通过字段和方法提取各部分:Scheme、Host、Path(解码)、EscapedPath(编码)、Query(url.Values)及Fragment等。

在 Go 语言中,标准库 net/url 提供了完整的 URL 解析能力,能安全、准确地提取协议、主机、路径、查询参数等信息。关键在于使用 url.Parse() 得到 *url.URL 结构体,再通过其字段和方法访问各部分。
解析 URL 字符串
调用 url.Parse() 是第一步。它返回一个指针和可能的错误,必须检查错误,因为格式不合法(如缺少 scheme 或含非法字符)会导致解析失败。
- 带 scheme 的 URL(如
"https://example.com/path?a=1&b=2")可被完整解析 - 不带 scheme 的字符串(如
"/path?x=y")会被当作相对 URL,Host为空,Path包含完整路径
获取路径信息(Path 和 EscapedPath)
u.Path 返回已解码的路径(如 "/user/张三" → "/user/张三"),适合展示或逻辑判断;u.EscapedPath() 返回原始编码路径(如 "/user/%E5%BC%A0%E4%B8%89"),适合拼接或重构建 URL。
- 路径末尾斜杠是否保留取决于原始输入,Go 不自动标准化
- 若需规范路径(如合并
"a/../b"),可用path.Clean(u.Path)(注意:这是path包,非url)
提取查询参数(Query)
通过 u.Query() 获取 url.Values 类型(本质是 map[string][]string),它自动解析并解码所有查询键值对。
立即学习“go语言免费学习笔记(深入)”;
-
v := u.Query(); name := v.Get("name")—— 获取第一个值(常用) -
v["age"]或v["city"]—— 直接取切片,支持多值(如?tag=a&tag=b) - 新增或修改参数需先改
v,再用u.RawQuery = v.Encode()写回
其他常用字段说明
*url.URL 还提供多个直接可用字段:
-
u.Scheme:协议名,小写("https") -
u.Host:主机+端口("example.com:8080"),不含协议和路径 -
u.User:认证信息(如url.UserPassword("u", "p")设置) -
u.Fragment:锚点("#section1"中的"section1")










