1、URL的定义信息
type URL struct {
Scheme string
Opaque string // encoded opaque data
User *Userinfo // username and password information
Host string // host or host:port
Path string // path (relative paths may omit leading slash)
RawPath string // encoded path hint (see EscapedPath method)
ForceQuery bool // append a query ('?') even if RawQuery is empty
RawQuery string // encoded query values, without '?'
Fragment string // fragment for references, without '#'
RawFragment string // encoded fragment hint (see EscapedFragment method)
}
type URL struct {
Scheme string // http或https协议
Opaque string // 编码不透明数据
User *Userinfo // 用户名密码信息--例如FTP需要带着用户名密码访问
Host string // 主机或主机:端口
Path string // 路径(相对路径可以省略前导斜线)
RawPath string // 编码路径
ForceQuery bool // 即使没有请求参数也会强制添加 ? 号
RawQuery string // 编码不带 ? 号的请求参数
Fragment string // 不带 # 号的引用片段
RawFragment string // 编码引用片段
}
2、解析给定的URL
package main
import (
"fmt"
"net/url"
)
func main() {
rawUrl := "https://pkg.go.dev/net/url?a=b&c=d#example-ParseQuery"
uri, err := url.Parse(rawUrl)
if err != nil {
return
}
fmt.Println(fmt.Sprintf("解析后的URL是:%#v", uri))
}
![image-20220117162218405](https://img2020.cnblogs.com/blog/1768648/202201/1768648-20220117165546627-2043502228.png)
3、拼接query参数构建URL
package main
import (
"fmt"
"net/url"
)
func main1() {
rawUrl := "https://pkg.go.dev/net/url?a=b&c=d#example-ParseQuery"
uri, err := url.Parse(rawUrl)
if err != nil {
return
}
fmt.Println(fmt.Sprintf("解析后的URL是:%#v", uri))
}
func main() {
//创建 https://pkg.go.dev/net/url?a=b&b=d#example-ParseQuery
u := url.URL{}
u.Scheme = "https"
u.Host = "pkg.go.dev"
u.Path = "/net/url"
values := url.Values{} //拼接query参数
values.Add("a", "b")
values.Add("b", "d")
u.RawQuery = values.Encode()
u.Fragment = "example-ParseQuery"
fmt.Println(fmt.Sprintf("URL是:%s", u.String()))
}
![image-20220117165049751](https://img2020.cnblogs.com/blog/1768648/202201/1768648-20220117165547203-1561957654.png)
4、修改请求路径和参数
package main
import (
"fmt"
"net/url"
"path"
)
func main() {
rawUrl := "https://pkg.go.dev/net/url?a=b&c=d#example-ParseQuery"
uri, err := url.Parse(rawUrl)
if err != nil {
return
}
v := url.Values{}
v.Add("a", "c")
v.Add("c", "b")
uri.RawQuery = v.Encode()
uri.Path = path.Join(uri.Path, "/ccc/ddd")
fmt.Println(fmt.Sprintf("修改后的URL是:%s", uri))
}
![image-20220117165348164](https://img2020.cnblogs.com/blog/1768648/202201/1768648-20220117165547665-2028230259.png)