Golang URL编程之初实践

108 阅读2分钟

URL (Uniform Resource Locator)是一种用干标识与联网上资源的地址,句括网页,图片、视频等。一个URL通堂由以下几个部分组成

1.协议 (scheme) : 指定访问资源所使用的协议类型,例如http,http,ftp等

2.用户名 (username) 和密码 (password) : 用于访问需要认证的资源。通常用于FTP协议中,例如: ftp://username:password@ftp.example.com

3,主机名 (host)和端口号 (port) : 用于标识资源所在的服务器地址和端口号,例如: www.example.com:80804.路径 (path) : 标识服务器上资源的路径,例如: /images/logo.png。

5.查询参数 (query): 用于向服务器传递参数,以便获取特定的资源。例如: www.example.com/searchg=gol….

6.片段标识符 (fragment): 指定文档中的某个锚点,例如: www.example.com/index.html#…

在Go中,可以使用标准库中的"net/ur"包来进行URL编程。该包提供了一些功能,使您可以解析、构建和操作URL字符串。 下面是一些使用"net/url"包的示例代码

解析URL

要解析URL,可以使用"net/ur"包中的"Parse"函数。该函数将URL字符审解析为"URL"结构体,该结构体包含了URL的各个组成部分,Scheme、 Host、Path、 Query和和Fragment等

package main

import (
	"fmt"
	"net/url"
)

func main() {
	// 解析URL
	u, err := url.Parse("https://www.example.com/search?q=golang#top")
	if err != nil {
		fmt.Println(err)
		return
	}

	// 输出URL的各个部分
	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: /search
Query: map[q:[golang]]
Fragment: top

构建URL

要构建URL,可以使用"net/url"包中的"Parse"函数返回的"URL"结构体。使用该结构体的各个字段来设置URL的各个组成部分,并使用"String"方法将其转换为字符串

package main

import (
	"fmt"
	"net/url"
)

func main() {
	// 构建URL
	u := &url.URL{
		Scheme: "https",
		Host:   "www.example.com",
		Path:   "/search",
	}
	q := u.Query()
	q.Set("q", "golang")
	u.RawQuery = q.Encode()

	// 输出URL字符串
	fmt.Println(u.String())
}

输出如下:

https://www.example.com/search?q=golang

解析查询参数

要解析查询参数,可以使用"net/ur"包中的“Values"类型。将查询字符串作为参数传递给"Values"函数,然后可以使用"Get”方法来获取特定参数的值。

package main

import (
	"fmt"
	"net/url"
)

func main() {
	// 解析查询参数
	values, err := url.ParseQuery("q=golang&sort=recent&limit=10")
	if err != nil {
		fmt.Println(err)
		return
	}

	// 获取特定参数的值
	q := values.Get("q")
	sort := values.Get("sort")
	limit := values.Get("limit")

	fmt.Println("q:", q)
	fmt.Println("sort:", sort)
	fmt.Println("limit:", limit)
}

输出如下:

q: golang
sort: recent
limit: 10

编码和解码

要对URL字符串进行编码和解码,可以使用"net/ur"包中的"QueryEscape"和“QueryUnescape"函数。它们分别用于对URL字符串进行编码和解码