golang url

发布时间:2024-12-23 08:33:51

在Go语言中,有一个非常常用的包是net/url,它提供了一系列用于解析和操作URL的函数。其中,url.Parse函数是最常用的,它可以将一个字符串类型的URL解析为url.URL类型的值。本文将介绍url.Parse函数的使用方法及其特点。

解析URL

使用url.Parse函数可以将一个字符串类型的URL解析为url.URL类型的值。例如:

import (
    "fmt"
    "net/url"
)

func main() {
    urlString := "https://www.example.com/path?query=123#fragment"
    u, err := url.Parse(urlString)
    if err != nil {
        fmt.Println("URL解析错误:", err)
        return
    }
    
    fmt.Println("Scheme:", u.Scheme)
    fmt.Println("Host:", u.Host)
    fmt.Println("Path:", u.Path)
    fmt.Println("Query:", u.Query())
    fmt.Println("Fragment:", u.Fragment)
}

上面的代码会输出:

Scheme: https
Host: www.example.com
Path: /path
Query: map[query:[123]]
Fragment: fragment

解析相对URL

url.Parse函数还可以用于解析相对URL。如果传入的URL字符串不带有Scheme和Host信息,那么解析出来的url.URL类型变量的Scheme和Host字段将为空。例如:

import (
    "fmt"
    "net/url"
)

func main() {
    relativeURL := "/path?query=123#fragment"
    u, err := url.Parse(relativeURL)
    if err != nil {
        fmt.Println("URL解析错误:", err)
        return
    }
    
    fmt.Println("Scheme:", u.Scheme)
    fmt.Println("Host:", u.Host)
    fmt.Println("Path:", u.Path)
    fmt.Println("Query:", u.Query())
    fmt.Println("Fragment:", u.Fragment)
}

上面的代码会输出:

Scheme:
Host:
Path: /path
Query: map[query:[123]]
Fragment: fragment

URL编码与解码

url.Parse函数还可以进行URL的编码和解码操作。通过url.QueryEscape函数可以对URL中的特殊字符进行编码,而通过url.QueryUnescape函数可以解码被编码的URL字符串。例如:

import (
    "fmt"
    "net/url"
)

func main() {
    originalURL := "https://www.example.com/?query=查询"
    
    // 编码URL
    encodedURL := url.QueryEscape(originalURL)
    fmt.Println("编码后的URL:", encodedURL)

    // 解码URL
    decodedURL, err := url.QueryUnescape(encodedURL)
    if err != nil {
        fmt.Println("URL解码错误:", err)
        return
    }
    fmt.Println("解码后的URL:", decodedURL)
}

上面的代码会输出:

编码后的URL: https%3A%2F%2Fwww.example.com%2F%3Fquery%3D%E6%9F%A5%E8%AF%A2
解码后的URL: https://www.example.com/?query=查询

上面的例子中,我们先对原始URL进行了编码,然后通过url.QueryUnescape函数对编码后的URL进行解码,最终得到了与原始URL一致的字符串。

相关推荐