net/url包用于解析和处理URL及查询参数。通过url.Parse()可提取URL各部分;url.ParseQuery()或Query()方法解析查询参数为键值对;url.Values支持参数增删改查并自动编码;QueryEscape/Unescape实现特殊字符编码解码,确保URL合法性。

在Go语言中,net/url 包提供了处理URL和查询参数的实用功能,包括网址解析、参数编码与解码。这对于构建HTTP请求、处理Web表单数据或解析跳转链接非常关键。
URL解析:提取结构化信息
使用 url.Parse() 可将字符串URL解析为 *url.URL 结构体,便于访问各部分。
示例:
u, err := url.Parse("https://user:pass@example.com:8080/path?a=1&b=2#fragment")if err != nil { log.Fatal(err)}fmt.Println("Scheme:", u.Scheme) // httpsfmt.Println("User:", u.User) // user:passfmt.Println("Host:", u.Host) // example.com:8080fmt.Println("Path:", u.Path) // /pathfmt.Println("RawQuery:", u.RawQuery) // a=1&b=2fmt.Println("Fragment:", u.Fragment) // fragment
查询参数解码:获取键值对
通过 url.ParseQuery() 或直接访问 URL 结构的 Query() 方法,可以将查询字符串解析为 url.Values 类型(即 map[string][]string)。
示例:
rawQuery := "name=go&tag=web&tag=url"values, _ := url.ParseQuery(rawQuery)fmt.Println(values["name"]) // [go]fmt.Println(values["tag"]) // [web url]// 从已解析的URL获取u, _ := url.Parse("https://example.com?lang=zh&mode=debug")fmt.Println(u.Query().Get("lang")) // zh(只取第一个值)fmt.Println(u.Query()["mode"]) // [debug]
查询参数编码:生成合法查询字符串
url.Values 支持添加、设置、删除参数,并能自动编码为合法的查询字符串。
立即学习“go语言免费学习笔记(深入)”;
操作示例:
v := url.Values{}v.Set("q", "golang tutorial")v.Add("tag", "web")v.Add("tag", "network")// 编码输出encoded := v.Encode() // q=golang+tutorial&tag=web&tag=networkfmt.Println(encoded)// 构建完整URLu := &url.URL{ Scheme: "https", Host: "example.com", Path: "/search", RawQuery: encoded,}fmt.Println(u.String()) // https://example.com/search?q=golang+tutorial&tag=web&tag=network
特殊字符编码与解码
Go会自动对参数值进行URL编码(如空格转为+或%20),解码时也正确还原。
中文、空格、符号等都会被编码,确保URL合法性 url.QueryEscape() 手动编码字符串 url.QueryUnescape() 进行反向解码示例:
keyword := "搜索 golang"escaped := url.QueryEscape(keyword)fmt.Println(escaped) // %E6%90%9C%E7%B4%A2+golangoriginal, _ := url.QueryUnescape(escaped)fmt.Println(original) // 搜索 golang
基本上就这些。掌握 net/url 的解析与编码机制,能有效避免参数传递出错或乱码问题,尤其在构建API请求或处理回调时非常实用。
以上就是Golang的net/url网址解析 参数编码解码的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1400009.html
微信扫一扫
支付宝扫一扫