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.Parse() 是第一步。它返回一个指针和可能的错误,必须检查错误,因为格式不合法(如缺少 scheme 或含非法字符)会导致解析失败。
"https://example.com/path?a=1&b=2")可被完整解析"/path?x=y")会被当作相对 URL,Host 为空,Path 包含完整路径u.Path 返回已解码的路径(如 "/user/张三" → "/user/张三"),适合展示或逻辑判断;u.EscapedPath() 返回原始编码路径(如 "/user/%E5%BC%A0%E4%B8%89"),适合拼接或重构建 URL。
"a/../b"),可用 path.Clean(u.Path)(注意:这是 path 包,非 url)
Query)通过 u.Query() 获取 url.Values 类型(本质是 map[string][]string),它自动解析并解码所有查询键值对。
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")