url解析
295字小于1分钟
2025-02-03
URL(Uniform Resource Locator):统一资源定位符,是 URI 的一个子集。URL 定义了一个资源的具体位置,以及用于访问该资源的协议和位置信息。它通常包含以下几个部分:
- 协议(例如 http, https, ftp 等)
- 主机名或 IP 地址
- 可选的端口号
- 资源路径
- 可选的查询参数
- 可选的片段标识符
例如,下面代码中就是一个典型 URL 的示例:
package main
import (
"fmt"
"net/url"
"strings"
)
func main() {
// 1. 创建一个URL对象
u, err := url.Parse("https://www.example.com/path?query=value1,value2#fragment")
if err != nil {
fmt.Println("解析URL出错:", err)
return
}
// 2. 打印URL的各个部分
fmt.Println("完整的URL:", u.String())
fmt.Println("协议:", u.Scheme)
fmt.Println("主机名和端口:", u.Host)
fmt.Println("路径:", u.Path)
queryParams, err := url.ParseQuery(u.RawQuery)
if err != nil {
fmt.Println("解析查询参数出错:", err)
return
}
fmt.Println("查询参数:", queryParams)
fmt.Println("查询参数:", strings.Split(queryParams["query"][0], ","))
fmt.Println("片段标识符:", u.Fragment)
// 3. 修改URL的某个部分
// 修改路径
newPath := "/newpath"
u.Path = newPath
fmt.Println("修改后的路径:", u.Path)
// 添加新的查询参数
newParam := "newparam"
newValue := "newvalue"
queryParams.Add(newParam, newValue)
u.RawQuery = queryParams.Encode()
fmt.Println("添加新的查询参数后的URL:", u.String())
}