Golang中urlencode與urldecode編碼解碼詳解
一、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語言實(shí)現(xiàn)UDP協(xié)議及TCP通訊
這篇文章介紹了Go語言實(shí)現(xiàn)UDP協(xié)議及TCP通訊的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-075個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧分享
作為一名軟件工程師,確保你的代碼高效且性能良好是非常重要的。本文主要和大家分享5個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧,希望對大家有所幫助2023-03-03golang bad file descriptor問題的解決方法
這篇文章主要給大家介紹了golang bad file descriptor問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02golang語言實(shí)現(xiàn)的文件上傳與文件下載功能示例
這篇文章主要介紹了golang語言實(shí)現(xiàn)的文件上傳與文件下載功能,結(jié)合實(shí)例形式分析了Go語言實(shí)現(xiàn)的文件傳輸相關(guān)操作技巧,需要的朋友可以參考下2020-02-02