最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go?語(yǔ)言入門之net/url?包

 更新時(shí)間:2022年05月04日 14:03:10   作者:宇宙之一粟  
這篇文章主要介紹了Go?語(yǔ)言入門之net/url?包,文章基于GO語(yǔ)言的相關(guān)資料展開?net/url?包的詳細(xì)內(nèi)容,具有一定的的參考價(jià)值,需要的小伙伴可以參考一下

引言

在 Golang 中,將 URL 打包用于從服務(wù)器獲取數(shù)據(jù)非常重要。只需了解您是否正在處理任何應(yīng)用程序并且您想從任何外部位置或服務(wù)器獲取此應(yīng)用程序的數(shù)據(jù),都需要我們可以使用 URL。

URL 格式

URL 包含各種參數(shù):例如 端口、URL 中的搜索字符串等。 URL 可以包含各種方法,允許它處理 URL 屬性和進(jìn)行修改,例如,如果我們有一個(gè)類似的 URL www.exmple.com:3000 ,3000 是 URL 的端口,借助 net/url 中的封裝函數(shù)我們可以訪問端口號(hào),同理,還可以檢查 URL 格式是否有效。

先來看一下常見 URL 的格式:

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

  • scheme : 方案是如何訪問指定資源的主要標(biāo)識(shí)符,他會(huì)告訴負(fù)責(zé)解析 URL 應(yīng)用程序應(yīng)該使用什么協(xié)議;
  • user :用戶名;
  • password :密碼;
  • host : 主機(jī)組件標(biāo)識(shí)了因特網(wǎng)上能夠訪問資源的宿主機(jī)器,可以有主機(jī)名或者是 IP 地址來表示;
  • port : 端口標(biāo)識(shí)了服務(wù)器正在監(jiān)聽的網(wǎng)絡(luò)端口。默認(rèn)端口號(hào)是 80;
  • path : URL 的路徑組件說明了資源位于服務(wù)器的什么地方;
  • params : URL 中通過協(xié)議參數(shù)來訪問資源,比名值對(duì)列表,分號(hào)分割來進(jìn)行訪問;
  • query : 字符串是通過提問問題或進(jìn)行查詢來縮小請(qǐng)求資源類的范圍;
  • frag : 為了引用部分資源或資源的一個(gè)片段,比如 URL 指定 HTML 文檔中一個(gè)圖片或一個(gè)小節(jié);

HTTP 通常只處理整個(gè)對(duì)象,而不是對(duì)象的片段,客戶端不能將片段傳送給服務(wù)器。瀏覽器從服務(wù)器獲取整個(gè)資源之后,會(huì)根據(jù)片段來顯示你感興趣的片段部分。

對(duì)應(yīng) Go 中 URL 的結(jié)構(gòu)體:

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 包函數(shù)使用格式

Go 的 net/url 提供了眾多處理 URL 的內(nèi)置函數(shù),這些函數(shù)的使用格式如下:

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

  • URL:這包含 URL 名稱和 URL 的一些基本細(xì)節(jié)。我們可以給它起任何名字。它就像任何變量一樣。
  • error: 這是 error 部分,以防 URL 錯(cuò)誤或出現(xiàn)任何異常,在這種情況下 URL 將返回錯(cuò)誤,并且該 error 將在 error 部分中捕獲。
  • inbuilt-function-name:正如我們所討論的,URL 包中有許多函數(shù)可以處理 URL,例如 ParsePath、Rawpath、string() 所有這些函數(shù)我們可以用于不同的目的。

如何使用 URL 包

在了解 url 包的工作原理之前我們需要了解基本的使用。當(dāng)我們點(diǎn)擊任何 url 時(shí),它可以包含許多屬性,比如它可以有一些端口、它可以有一些搜索、它可以有一些路徑等,所以我們使用 URL 來操作和處理所有這些東西。讓我們了解一下 go 語(yǔ)言中 URL 包 的工作原理。

package main
import (
"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()
}

運(yùn)行結(jié)果:

$ 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 中對(duì)查詢字符串進(jìn)行 URL 編碼

Go 的 net/url 包包含一個(gè)名為 QueryEscape 的內(nèi)置方法,用于對(duì)字符串進(jìn)行轉(zhuǎn)義/編碼,以便可以安全地將其放置在 URL 查詢中。以下示例演示了如何在 Golang 中對(duì)查詢字符串進(jìn)行編碼:

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

運(yùn)行結(jié)果:

$ go run main.go
Hello+World

在 Golang 中對(duì)多個(gè)查詢參數(shù)進(jìn)行 URL 編碼

如果您想一次編碼多個(gè)查詢參數(shù),那么您可以創(chuàng)建一個(gè) url.Values 結(jié)構(gòu),其中包含查詢參數(shù)到值的映射,并使用 url.Values.Encode() 方法對(duì)所有查詢參數(shù)進(jìn)行編碼。

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

運(yùn)行代碼:

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

在 Golang 中對(duì)路徑段進(jìn)行 URL 編碼

就像 QueryEscape 一樣,Go 中的 net/url 包有另一個(gè)名為 PathEscape() 的函數(shù)來對(duì)字符串進(jìn)行編碼,以便它可以安全地放置在 URL 的路徑段中:

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

運(yùn)行結(jié)果:

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

通過對(duì)各個(gè)部分進(jìn)行編碼來構(gòu)建完整的 URL

最后,我們來看一個(gè)完整的 Golang 中 URL 解析和 URL 編碼的例子:

package main
import (
"fmt"
"net/url"
)
func main() {
// Let's start with a base url
baseUrl, 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 Parameters
params := url.Values{}
params.Add("q", "Hello World")
params.Add("u", "@wade")
// Add Query Parameters to the URL
baseUrl.RawQuery = params.Encode() // Escape Query Parameters
fmt.Printf("Encoded URL is %q\n", baseUrl.String())
}

運(yùn)行代碼:

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

在 Golang 中解析 URL

package main
import (
"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()
}

運(yùn)行代碼:

$ 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

處理相對(duì)路徑

package main
import (
"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 main
import (
"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()
}

運(yùn)行結(jié)果:

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

判斷絕對(duì)地址

package main
import (
"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 main
import (
"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

到此這篇關(guān)于Go 語(yǔ)言入門之net/url 包的文章就介紹到這了,更多相關(guān)Go net/url 包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go:垃圾回收GC觸發(fā)條件詳解

    go:垃圾回收GC觸發(fā)條件詳解

    這篇文章主要介紹了go:垃圾回收GC觸發(fā)條件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • GO 函數(shù)式選項(xiàng)模式(Functional Options Pattern)

    GO 函數(shù)式選項(xiàng)模式(Functional Options Pattern)

    Option模式支持傳遞多個(gè)參數(shù),并且在參數(shù)個(gè)數(shù)、類型發(fā)生變化時(shí)保持兼容性,任意順序傳遞參數(shù),下面給大家介紹GO 函數(shù)式選項(xiàng)模式(Functional Options Pattern)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-10-10
  • GoLand一鍵上傳項(xiàng)目到遠(yuǎn)程服務(wù)器的方法步驟

    GoLand一鍵上傳項(xiàng)目到遠(yuǎn)程服務(wù)器的方法步驟

    我們開發(fā)項(xiàng)目常常將項(xiàng)目上傳到linux遠(yuǎn)程服務(wù)器上來運(yùn)行,本文主要介紹了GoLand一鍵上傳項(xiàng)目到遠(yuǎn)程服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Golang依賴注入工具digo的使用詳解

    Golang依賴注入工具digo的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中依賴注入工具digo的使用,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Go?Gin框架路由相關(guān)bug分析

    Go?Gin框架路由相關(guān)bug分析

    這篇文章主要為大家介紹了Go?Gin框架路由相關(guān)bug分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • golang 歸并排序,快速排序,堆排序的實(shí)現(xiàn)

    golang 歸并排序,快速排序,堆排序的實(shí)現(xiàn)

    本文主要介紹了golang 歸并排序,快速排序,堆排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用Go語(yǔ)言編寫簡(jiǎn)潔代碼的最佳實(shí)踐

    使用Go語(yǔ)言編寫簡(jiǎn)潔代碼的最佳實(shí)踐

    簡(jiǎn)潔的代碼對(duì)于創(chuàng)建可維護(hù)、可閱讀和高效的軟件至關(guān)重要,Go 是一種強(qiáng)調(diào)簡(jiǎn)單和代碼整潔的語(yǔ)言,在本文中,我們將結(jié)合代碼示例,探討編寫簡(jiǎn)潔 Go 代碼的最佳實(shí)踐,需要的朋友可以參考下
    2023-09-09
  • golang jwt鑒權(quán)的實(shí)現(xiàn)流程

    golang jwt鑒權(quán)的實(shí)現(xiàn)流程

    本文主要介紹了golang jwt鑒權(quán)的實(shí)現(xiàn)流程,包含生成JWT令牌、客戶端存儲(chǔ)和發(fā)送JWT令牌、服務(wù)端驗(yàn)證JWT令牌等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Go語(yǔ)言如何使用 Viper 來管理配置

    Go語(yǔ)言如何使用 Viper 來管理配置

    在現(xiàn)代軟件開發(fā)中,良好的配置管理可以極大地提升應(yīng)用的靈活性和可維護(hù)性,下面我們就來看看GO語(yǔ)言中如何使用 Viper 來管理配置吧
    2024-11-11
  • Go語(yǔ)言通過反射實(shí)現(xiàn)獲取各種類型變量的值

    Go語(yǔ)言通過反射實(shí)現(xiàn)獲取各種類型變量的值

    反射是程序在運(yùn)行期間獲取變量的類型和值、或者執(zhí)行變量的方法的能力,這篇文章主要為大家講講Go語(yǔ)言通過反射獲取各種類型變量值的方法,需要的可以參考下
    2023-07-07

最新評(píng)論

屏山县| 万荣县| 柳河县| 丰县| 荃湾区| 泰宁县| 泰顺县| 卫辉市| 二手房| 九江县| 柳州市| 和静县| 广河县| 内丘县| 商洛市| 昌宁县| 沁源县| 南投县| 中超| 石河子市| 门头沟区| 太原市| 裕民县| 揭阳市| 汕尾市| 海盐县| 夹江县| 綦江县| 深州市| 全南县| 沅江市| 开化县| 改则县| 江西省| 平邑县| 措美县| 徐闻县| 黄骅市| 安仁县| 乐安县| 类乌齐县|