亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang中urlencode與urldecode編碼解碼詳解

 更新時(shí)間:2023年09月06日 09:53:45   作者:碼云筆記  
這篇文章主要給大家介紹了關(guān)于Golang中urlencode與urldecode編碼解碼的相關(guān)資料,在Go語言中轉(zhuǎn)碼操作非常方便,可以使用內(nèi)置的encoding包來快速完成轉(zhuǎn)碼操作,Go語言中的encoding包提供了許多常用的編碼解碼方式,需要的朋友可以參考下

一、urlencode

golang下可以使用net/url模塊實(shí)現(xiàn)urlencode和urldecode操作。具體實(shí)現(xiàn)的函數(shù)為url.QueryEscape和url.QueryUnescape,代碼如下:

package main
import(    "fmt"
    "net/url")
func main()  {    var urlStr string = "運(yùn)維之路"
    escapeUrl := url.QueryEscape(urlStr)
    fmt.Println("編碼:",escapeUrl)
    enEscapeUrl, _ := url.QueryUnescape(escapeUrl)
    fmt.Println("解碼:",enEscapeUrl)
}

如果涉及到多個(gè)參數(shù)轉(zhuǎn)碼的,這在get和post請求中都有,比如id=100&site=361way.com這樣的。可以在通過url.Values進(jìn)行增加后轉(zhuǎn)碼,發(fā)下:

package main
import (
	"fmt"
	"net/url"
)
func main() {
	params := url.Values{}
	params.Add("name", "@Rajeev")
	params.Add("phone", "+919999999999")
	fmt.Println(params.Encode())
}
#輸出:
name=%40Rajeev&phone=%2B919999999999

同樣的,我們通過url的其他函數(shù)處理操作過后,一個(gè)典型的get請求的URL如下:

package main
import (
	"fmt"
	"net/url"
)
func main() {
	// Let's start with a base url
	baseUrl, err := url.Parse("http://www.mywebsite.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", "@rajeev")
	// Add Query Parameters to the URL
	baseUrl.RawQuery = params.Encode() // Escape Query Parameters
	fmt.Printf("Encoded URL is %q
", baseUrl.String())
}
#輸出結(jié)果
Encoded URL is "http://www.mywebsite.com/path%20with%3Freserved%20characters?q=Hello+World&u=%40rajeev"

二、urldecode

簡單的url解碼,直接使用Unescape就可以了,如下:

package main
import (
	"fmt"
	"log"
	"net/url"
)
func main() {
	encodedValue := "Hell%C3%B6+W%C3%B6rld%40Golang"
	decodedValue, err := url.QueryUnescape(encodedValue)
	if err != nil {
		log.Fatal(err)
		return
	}
	fmt.Println(decodedValue)
}

帶form 參數(shù),就像上面提到的"param1=value1¶m2=value2"這種格式的可以使用url.ParseQuery()參數(shù)解析成map[string][]string格式,如下:

package main
import (
	"fmt"
	"log"
	"net/url"
)
func main() {
	queryStr := "name=Rajeev%20Singh&phone=%2B9199999999&phone=%2B628888888888"
	params, err := url.ParseQuery(queryStr)
	if err != nil {
		log.Fatal(err)
		return
	}
	fmt.Println("Query Params: ")
	for key, value := range params {
		fmt.Printf("  %v = %v
", key, value)
	}
}
#其輸出為:
Query Params:
  name = [Rajeev Singh]
  phone = [+9199999999 +628888888888]

一個(gè)get請求類,后面帶參數(shù)的URL,可以通過如下方式解析并解碼

package main
import (
	"fmt"
	"log"
	"net/url"
)
func main() {
	u, err := url.Parse("https://www.website.com/person?name=Rajeev%20Singh&phone=%2B919999999999&phone=%2B628888888888")
	if err != nil {
		log.Fatal(err)
		return
	}
	fmt.Println("Scheme: ", u.Scheme)
	fmt.Println("Host: ", u.Host)
	queries := u.Query()
	fmt.Println("Query Strings: ")
	for key, value := range queries {
		fmt.Printf("  %v = %v
", key, value)
	}
	fmt.Println("Path: ", u.Path)
}
# 輸出如下:
Scheme:  https
Host:  www.website.com
Query Strings:
  phone = [+919999999999 +628888888888]
  name = [Rajeev Singh]
Path:  /person

總結(jié) 

到此這篇關(guān)于Golang中urlencode與urldecode編碼解碼的文章就介紹到這了,更多相關(guān)Golang中urlencode與urldecode內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中的map擴(kuò)容機(jī)制

    Go語言中的map擴(kuò)容機(jī)制

    Go語言中的map是一種高效的數(shù)據(jù)結(jié)構(gòu),其擴(kuò)容機(jī)制確保了在大數(shù)據(jù)量情況下的性能,本文介紹了包括擴(kuò)容觸發(fā)條件、擴(kuò)容過程和漸進(jìn)式擴(kuò)容,感興趣的可以了解一下
    2024-12-12
  • Go語言實(shí)現(xiàn)UDP協(xié)議及TCP通訊

    Go語言實(shí)現(xiàn)UDP協(xié)議及TCP通訊

    這篇文章介紹了Go語言實(shí)現(xiàn)UDP協(xié)議及TCP通訊的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 5個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧分享

    5個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧分享

    作為一名軟件工程師,確保你的代碼高效且性能良好是非常重要的。本文主要和大家分享5個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧,希望對大家有所幫助
    2023-03-03
  • golang順時(shí)針打印矩陣的方法示例

    golang順時(shí)針打印矩陣的方法示例

    這篇文章主要介紹了golang順時(shí)針打印矩陣的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Go語言庫系列之dotsql詳解

    Go語言庫系列之dotsql詳解

    這篇文章主要介紹了Go語言庫系列之dotsql的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Go錯(cuò)誤處理的幾種方式

    Go錯(cuò)誤處理的幾種方式

    在Go語言中,錯(cuò)誤處理是一種重要的編程模式,它用于處理可能出現(xiàn)的錯(cuò)誤或異常情況,本文就來介紹一下Go錯(cuò)誤處理的幾種方式,感興趣的可以了解一下
    2023-11-11
  • Golang的引用類型和指針的使用與區(qū)別

    Golang的引用類型和指針的使用與區(qū)別

    本文詳細(xì)介紹了Golang中的引用類型和指針的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • golang bad file descriptor問題的解決方法

    golang bad file descriptor問題的解決方法

    這篇文章主要給大家介紹了golang bad file descriptor問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • golang語言實(shí)現(xiàn)的文件上傳與文件下載功能示例

    golang語言實(shí)現(xiàn)的文件上傳與文件下載功能示例

    這篇文章主要介紹了golang語言實(shí)現(xiàn)的文件上傳與文件下載功能,結(jié)合實(shí)例形式分析了Go語言實(shí)現(xiàn)的文件傳輸相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • Golang使用Swagger文檔教程詳解

    Golang使用Swagger文檔教程詳解

    這篇文章主要為大家詳細(xì)介紹Golang使用Swagger文檔教程的相關(guān)知識(shí),文中通過示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12

最新評(píng)論