我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Go语言的net和url包怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Go语言的net和url包怎么用

这篇文章主要介绍了Go语言的net和url包怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言的net和url包怎么用文章都会有所收获,下面我们一起来看看吧。

引言

在 Golang 中,将 URL 打包用于从服务器获取数据非常重要。只需了解您是否正在处理任何应用程序并且您想从任何外部位置或服务器获取此应用程序的数据,都需要我们可以使用 URL。

URL 格式

URL 包含各种参数:例如 端口、URL 中的搜索字符串等。 URL 可以包含各种方法,允许它处理 URL 属性和进行修改,例如,如果我们有一个类似的 URL www.exmple.com:3000 ,3000 是 URL 的端口,借助 net/url 中的封装函数我们可以访问端口号,同理,还可以检查 URL 格式是否有效。

先来看一下常见 URL 的格式:

<schema>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>

  • scheme : 方案是如何访问指定资源的主要标识符,他会告诉负责解析 URL 应用程序应该使用什么协议;

  • user :用户名;

  • password :密码;

  • host : 主机组件标识了因特网上能够访问资源的宿主机器,可以有主机名或者是 IP 地址来表示;

  • port : 端口标识了服务器正在监听的网络端口。默认端口号是 80;

  • path : URL 的路径组件说明了资源位于服务器的什么地方;

  • params : URL 中通过协议参数来访问资源,比名值对列表,分号分割来进行访问;

  • query : 字符串是通过提问问题或进行查询来缩小请求资源类的范围;

  • frag : 为了引用部分资源或资源的一个片段,比如 URL 指定 HTML 文档中一个图片或一个小节;

HTTP 通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获取整个资源之后,会根据片段来显示你感兴趣的片段部分。

对应 Go 中 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)}

Go url 包函数使用格式

Go 的 net/url 提供了众多处理 URL 的内置函数,这些函数的使用格式如下:

URL, error := url.inbuilt-function-name("url")

  • URL:这包含 URL 名称和 URL 的一些基本细节。我们可以给它起任何名字。它就像任何变量一样。

  • error: 这是 error 部分,以防 URL 错误或出现任何异常,在这种情况下 URL 将返回错误,并且该 error 将在 error 部分中捕获。

  • inbuilt-function-name:正如我们所讨论的,URL 包中有许多函数可以处理 URL,例如 ParsePathRawpathstring() 所有这些函数我们可以用于不同的目的。

如何使用 URL 包

在了解 url 包的工作原理之前我们需要了解基本的使用。当我们点击任何 url 时,它可以包含许多属性,比如它可以有一些端口、它可以有一些搜索、它可以有一些路径等,所以我们使用 URL 来操作和处理所有这些东西。让我们了解一下 go 语言中 URL 包 的工作原理。

package mainimport ("fmt""log""net/url")func TestURL() {URL, err := url.Parse("https://www.baidu.com/s?wd=golang")fmt.Println("Url before modification is", URL)if err != nil {log.Fatal("An error occurs while handling url", err)}URL.Scheme = "https"URL.Host = "bing.com"query := URL.Query()query.Set("q", "go")URL.RawQuery = query.Encode()fmt.Println("The url after modification is", URL)}func main() {TestURL()}

运行结果:

$ go run main.go
Url before modification is https://www.baidu.com/s?wd=golang
The url after modification is https://bing.com/s?q=go&wd=golang

在 Golang 中对查询字符串进行 URL 编码

Go 的 net/url 包包含一个名为 QueryEscape 的内置方法,用于对字符串进行转义/编码,以便可以安全地将其放置在 URL 查询中。以下示例演示了如何在 Golang 中对查询字符串进行编码:

package mainimport ("fmt""net/url")func main() {query := "Hello World"fmt.Println(url.QueryEscape(query))}

运行结果:

$ go run main.go
Hello+World

在 Golang 中对多个查询参数进行 URL 编码

如果您想一次编码多个查询参数,那么您可以创建一个 url.Values 结构,其中包含查询参数到值的映射,并使用 url.Values.Encode() 方法对所有查询参数进行编码。

package mainimport ("fmt""net/url")func main() {params := url.Values{}params.Add("name", "@Wade")params.Add("phone", "+111111111111")fmt.Println(params.Encode())}

运行代码:

$ go run main.go
name=%40Wade&phone=%2B111111111111

在 Golang 中对路径段进行 URL 编码

就像 QueryEscape 一样,Go 中的 net/url 包有另一个名为 PathEscape() 的函数来对字符串进行编码,以便它可以安全地放置在 URL 的路径段中:

package mainimport ("fmt""net/url")func main() {path := "path with?reserved+characters"fmt.Println(url.PathEscape(path))}

运行结果:

$ go run main.go
path%20with%3Freserved+characters

通过对各个部分进行编码来构建完整的 URL

最后,我们来看一个完整的 Golang 中 URL 解析和 URL 编码的例子:

package mainimport ("fmt""net/url")func main() {// Let's start with a base urlbaseUrl, err := url.Parse("http://www.bing.com")if err != nil {fmt.Println("Malformed URL: ", err.Error())return}// Add a Path Segment (Path segment is automatically escaped)baseUrl.Path += "path with?reserved characters"// Prepare Query Parametersparams := url.Values{}params.Add("q", "Hello World")params.Add("u", "@wade")// Add Query Parameters to the URLbaseUrl.RawQuery = params.Encode() // Escape Query Parametersfmt.Printf("Encoded URL is %q\n", baseUrl.String())}

运行代码:

$ go run main.go
Encoded URL is "http://www.bing.com/path%20with%3Freserved%20characters?q=Hello+World&u=%40wade"

在 Golang 中解析 URL

package mainimport ("fmt""log""net/url")func TestURL() {URL, err := url.Parse("http://bing.com/good%2bad")fmt.Println("Url before modification is", URL)if err != nil {log.Fatal("An error occurs while handling url", err)}fmt.Println("The URL path is", URL.Path)fmt.Println("The URL raw path is", URL.RawPath)fmt.Println("The URL is ", URL.String())}func main() {TestURL()}

运行代码:

$ go run main.go
Url before modification is http://bing.com/good%2bad
The URL path is /good+ad
The URL raw path is /good%2bad
The URL is http://bing.com/good%2bad

处理相对路径

package mainimport ("fmt""log""net/url")func ExampleURL() {URL, error := url.Parse("../../..//search?q=php")fmt.Println("Url before modification is", URL)if error != nil {log.Fatal("An error occurs while handling url", error)}baseURL, err := url.Parse("http://example.com/directory/")if err != nil {log.Fatal("An error occurs while handling url", err)}fmt.Println(baseURL.ResolveReference(URL))}func main() {ExampleURL()}

$ go run main.go
Url before modification is ../../..//search?q=php
http://example.com/search?q=php

解析空格

package mainimport ("fmt""log""net/url")func ExampleURL() {URL, error := url.Parse("http://example.com/Here path with space")if error != nil {log.Fatal("An error occurs while handling url", error)}fmt.Println("The Url is", URL)}func main() {ExampleURL()}

运行结果:

$ go run main.go
The Url is http://example.com/Here%20path%20with%20space

判断绝对地址

package mainimport ("fmt""net/url")func main() {u := url.URL{Host: "example.com", Path: "foo"}fmt.Println("The Url is", u.IsAbs())u.Scheme = "http"fmt.Println("The Url is", u.IsAbs())}

$ go run main.go
The Url is false
The Url is true

解析端口

package mainimport ("fmt""log""net/url")func ExampleURL() {URL1, error := url.Parse("https://example.org")fmt.Println("URL1 before modification is", URL1)if error != nil {log.Fatal("An error occurs while handling url", error)}URL2, err := url.Parse("https://example.org:8080")if err != nil {log.Fatal("An error occurs while handling url", URL2)}fmt.Println("URL2 before modification is", URL2)fmt.Println("URL2 Port number is", URL2.Port())}func main() {ExampleURL()}

$ go run main.go
URL1 before modification is https://example.org
URL2 before modification is https://example.org:8080
URL2 Port number is 8080

关于“Go语言的net和url包怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Go语言的net和url包怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Go语言的net和url包怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go语言的net和url包怎么用

这篇文章主要介绍了Go语言的net和url包怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言的net和url包怎么用文章都会有所收获,下面我们一起来看看吧。引言在 Golang 中,将 URL 打包
2023-06-30

Go 语言入门之net/url 包

目录引言URL 格式Go url 包函数使用格式如何使用 URL 包在 Golang 中对查询字符串进行 URL 编码在 Golang 中对多个查询参数进行 URL 编码在 Golang 中对路径段进行 URL 编码通过对各个部分进行编码来
2022-06-07

Go语言的os包怎么使用

这篇“Go语言的os包怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言的os包怎么使用”文章吧。Go语言的 o
2023-07-05

Go语言Time包怎么使用

Go语言的Time包提供了一些用于处理时间的函数和类型。下面是一些常见的Time包的使用方法:1. 获取当前时间:```import "time"now := time.Now()```2. 格式化时间:```import "fmt"imp
2023-08-30

go语言怎么导包

在go语言中,可以使用import关键字来导包,导入的包名需使用双引号包围,包名是从GOPATH开始计算的路径,使用“/”进行路径分隔。go语言导包有两种基本格式:1、单行导入,语法“import "包名"”;2、多行导入,语法“import("包名1" "包名2" …)”。
2023-05-14

Go语言中的包Package怎么使用

本文小编为大家详细介绍“Go语言中的包Package怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中的包Package怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题一、Go使用Pac
2023-07-02

Go语言中的闭包怎么使用

这篇文章主要讲解了“Go语言中的闭包怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中的闭包怎么使用”吧!闭包基本介绍闭包就是 一个函数 和其相关的 引用环境 组合的一个整体好
2023-07-04

Go语言中unsafe包怎么使用

本文小编为大家详细介绍“Go语言中unsafe包怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中unsafe包怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 什么是unsafe包un
2023-07-05

使用Go语言文档中的net/http.StripPrefix函数实现URL路径剥离

Go语言是一种支持高并发、高性能网络编程的编程语言,而在编写Web服务时,经常会遇到对URL路径进行处理的需求。其中,URL路径剥离是一项常见的操作。本文将利用Go语言中的net/http包中的StripPrefix函数来实现URL路径剥离
使用Go语言文档中的net/http.StripPrefix函数实现URL路径剥离
2023-11-04

Go语言中net包RPC远程调用方式有哪些

这篇文章主要介绍Go语言中net包RPC远程调用方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、服务端在代码中,启动了三个服务package mainimport ("log""net""net/http
2023-06-25

怎么在Go语言中使用日志包

这篇“怎么在Go语言中使用日志包”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么在Go语言中使用日志包”文章吧。让我们来看
2023-06-30

Go语言中ioutil包的作用是什么

ioutil包是Go语言标准库中的一个工具包,提供了一些方便的文件I/O操作函数,用于处理文件和目录。它包括了一些常用的功能,如读取文件内容、写入文件、复制文件、删除文件、创建临时文件等。通过ioutil包,我们可以简单方便地对文件进行操作
Go语言中ioutil包的作用是什么
2024-03-07

Go语言中io包核心接口怎么用

小编给大家分享一下Go语言中io包核心接口怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Readerio.Reader接口定义了 Read 方法,用于读取数
2023-06-22

Go语言中的Goroutine和channel怎么使用

这篇“Go语言中的Goroutine和channel怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言中的Gor
2023-07-05

go语言怎么调用c语言

Go语言可以通过使用cgo工具以及一些特定的语法来调用C语言代码。以下是调用C语言的Go代码示例:创建一个名为 `callc.go` 的Go文件。package main/*#include // 声明一个外部的C函数extern v
2023-10-27

Go语言中的:=怎么用

这篇文章主要为大家展示了“Go语言中的:=怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中的:=怎么用”这篇文章吧。1. 单变量 :=Go 语言中新增了一个特殊的运算符:=,这个运
2023-06-22

go语言有依赖包怎么编译

当Go语言项目有依赖包时,可以使用以下几种方法进行编译:1. 使用`go build`命令:在项目根目录下运行`go build`命令,Go编译器会自动下载并编译项目的所有依赖包。编译成功后,会在当前目录生成可执行文件。2. 使用`go r
2023-09-26

必备的Go语言包是什么

标题:必备的Go语言包及具体代码示例Go语言作为一种高效、简洁的编程语言,拥有丰富的标准库,其中一些包是在开发过程中必不可少的。本文将介绍一些必备的Go语言包,并提供具体的代码示例说明它们的用法和作用。fmt包fmt包提供了格式化输入
必备的Go语言包是什么
2024-03-15

GO语言中通道和sync包如何使用

这篇文章主要讲解了“GO语言中通道和sync包如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中通道和sync包如何使用”吧!GO通道和 sync 包的分享我们一起回顾一下上次
2023-07-05

Go语言常用内置包是什么

今天小编给大家分享一下Go语言常用内置包是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。常用内置包:1、fmt,可实现格
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录