激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類(lèi)導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求的實(shí)例詳解

GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求的實(shí)例詳解

2021-02-21 00:51qq_27312939 Golang

這篇文章主要介紹了GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

 

Golang: 接收GETPOST參數(shù)

 

GET 和 POST 是我們最常用的兩種請(qǐng)求方式,今天講一講如何在 golang 服務(wù)中,正確接收這兩種請(qǐng)求的參數(shù)信息。

處理GET請(qǐng)求

1.1 接收GET請(qǐng)求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//接收GET請(qǐng)求
func Get(writer http.ResponseWriter , request *http.Request) {
 
 query := request.URL.Query()
 
 // 第一種方式
 // id := query["id"][0]
 
 // 第二種方式
 
 id := query.Get("id")
 
 log.Printf("GET: id=%s\n", id)
 
 fmt.Fprintf(writer, `{"code":0}`)
}
func main(){
 
 http.HandleFunc("/get", Get)
 log.Println("Running at port 9999 ...")
 err := http.ListenAndServe(":9999", nil)
 if err != nil {
  log.Fatal("ListenAndServe: ", err.Error())
 }
 
}

Postman 發(fā)起get請(qǐng)求

GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求的實(shí)例詳解

重新運(yùn)行程序,請(qǐng)求Postman,服務(wù)端控制臺(tái)打印如下:

2020/12/04 11:33:55 Running at port 9999 ...
2020/12/04 11:34:09 GET: id=123

1.2 接收GET請(qǐng)求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func Get(writer http.ResponseWriter , request *http.Request) {
 
 result := make(map[string]string)
 keys := request.URL.Query()
 for k, v := range keys {
  result[k] = v[0]
 }
 log.Println(result)
}
 
func main(){
 
 http.HandleFunc("/get", Get)
 log.Println("Running at port 9999 ...")
 err := http.ListenAndServe(":9999", nil)
 if err != nil {
  log.Fatal("ListenAndServe: ", err.Error())
 }
 
}

重新運(yùn)行程序,請(qǐng)求Postman,服務(wù)端控制臺(tái)打印如下:

2020/12/04 12:37:17 Running at port 9999 ...
2020/12/04 12:37:21 map[id:123 name:sina]

需要注意的是,這里的req.URL.Query()返回的是數(shù)組,因?yàn)間o可以接收id=1&id=2這樣形式的參數(shù)并放到同一個(gè)key下

接收POST請(qǐng)求

在開(kāi)發(fā)中,常用的 POST 請(qǐng)求有兩種,分別是 application/json 和 application/x-www-form-urlencoded,下面就來(lái)介紹一下這兩種類(lèi)型的處理方式。

1.1 接收application/x-www-form-urlencoded類(lèi)型的POST請(qǐng)求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func handlePostForm(writer http.ResponseWriter, request *http.Request) {
 request.ParseForm()
 
 // 第一種方式
 // username := request.Form["username"][0]
 // password := request.Form["password"][0]
 
 // 第二種方式
 username := request.Form.Get("username")
 password := request.Form.Get("password")
 
 fmt.Printf("POST form-urlencoded: username=%s, password=%s\n", username, password)
 
 fmt.Fprintf(writer, `{"code":0}`)
}
 
func main(){
 
 http.HandleFunc("/handlePostForm", handlePostForm)
 log.Println("Running at port 9999 ...")
 err := http.ListenAndServe(":9999", nil)
 if err != nil {
  log.Fatal("ListenAndServe: ", err.Error())
 }
 
}

Postman 發(fā)起x-www-form-urlencoded請(qǐng)求

GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求的實(shí)例詳解

重新運(yùn)行程序,請(qǐng)求Postman,服務(wù)端控制臺(tái)打印如下:

2020/12/04 12:44:32 Running at port 9999 ...
POST form-urlencoded: username=李四, password=12

1.2 接收application/x-www-form-urlencoded類(lèi)型的POST請(qǐng)求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func PostForm(w http.ResponseWriter, r *http.Request) {
 
 var result = make(map[string]string)
 r.ParseForm()
 for k,v := range r.PostForm {
  if len(v) < 1 { continue }
  result[k] = v[0]
 }
 
 log.Println(result)
 
}
 
func main(){
 
 http.HandleFunc("/PostForm", PostForm)
 log.Println("Running at port 9999 ...")
 err := http.ListenAndServe(":9999", nil)
 if err != nil {
  log.Fatal("ListenAndServe: ", err.Error())
 }
 
}

重新運(yùn)行程序,請(qǐng)求Postman,服務(wù)端控制臺(tái)打印如下:

2020/12/04 12:49:40 Running at port 9999 ...
2020/12/04 12:49:45 map[password:12 username:李四]

2 處理 application/json 請(qǐng)求

實(shí)際開(kāi)發(fā)中,往往是一些數(shù)據(jù)對(duì)象,我們需要將這些數(shù)據(jù)對(duì)象以 JSON 的形式返回,下面我們就來(lái)添加一段代碼:

JSON 結(jié)構(gòu)
比如,請(qǐng)求了手機(jī)歸屬地的接口,json 數(shù)據(jù)返回如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
{
 "resultcode": "200",
 "reason": "Return Successd!",
 "result": {
  "province": "浙江",
  "city": "杭州",
  "areacode": "0571",
  "zip": "310000",
  "company": "中國(guó)移動(dòng)",
  "card": ""
 }
}

思路是這樣的:

1.先將 json 轉(zhuǎn)成 struct。

2.然后 json.Unmarshal() 即可。

json 轉(zhuǎn) struct ,自己手寫(xiě)就太麻煩了,有很多在線(xiàn)的工具可以直接用,我用的這個(gè):

https://mholt.github.io/json-to-go/

在左邊貼上 json 后面就生成 struct 了。

用代碼實(shí)現(xiàn)下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//AutoGenerated 結(jié)構(gòu)體
type AutoGenerated struct {
  Resultcode string `json:"resultcode"`
  Reason  string `json:"reason"`
  Result  struct {
    Province string `json:"province"`
    City  string `json:"city"`
    Areacode string `json:"areacode"`
    Zip  string `json:"zip"`
    Company string `json:"company"`
    Card  string `json:"card"`
  } `json:"result"`
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
func PostJson(w http.ResponseWriter, r *http.Request ) {
 
 body ,err := ioutil.ReadAll(r.Body)
 if err != nil {
  log.Println( err)
 }
 log.Printf("%s",body)
 
 var data AutoGenerated
 json.Unmarshal([]byte(body),&data)
 
 //Json結(jié)構(gòu)返回
 json,_ := json.Marshal(data)
 w.Write(json)
 
}
 
func main(){
 
 http.HandleFunc("/PostJson", PostJson)
 log.Println("Running at port 9999 ...")
 err := http.ListenAndServe(":9999", nil)
 if err != nil {
  log.Fatal("ListenAndServe: ", err.Error())
 }
 
}

Postman 發(fā)起application/json 請(qǐng)求

GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求的實(shí)例詳解

重新運(yùn)行程序,訪(fǎng)問(wèn)頁(yè)面,服務(wù)端控制臺(tái)打印如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
2020/12/04 12:57:01 {
 "resultcode": "200",
 "reason": "Return Successd!",
 "a":"dd",
 "result": {
  "province": "浙江",
  "city": "杭州",
  "areacode": "0571",
  "zip": "310000",
  "company": "中國(guó)移動(dòng)",
  "card": "33"
 }
}

到此這篇關(guān)于GO接收GET/POST參數(shù)及發(fā)送GET/POST請(qǐng)求的文章就介紹到這了,更多相關(guān)GO接收GET/POST參數(shù)內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_27312939/article/details/110632297

延伸 · 閱讀

精彩推薦
  • GolangGolang通脈之?dāng)?shù)據(jù)類(lèi)型詳情

    Golang通脈之?dāng)?shù)據(jù)類(lèi)型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類(lèi)型,在編程語(yǔ)言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語(yǔ)言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說(shuō)起,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看...

    Go語(yǔ)言中文網(wǎng)11352020-05-21
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang 通過(guò)ssh代理連接mysql的操作

    golang 通過(guò)ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過(guò)ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    a165861639710342021-03-08
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    SmallQinYan12302021-02-02
  • Golanggo語(yǔ)言制作端口掃描器

    go語(yǔ)言制作端口掃描器

    本文給大家分享的是使用go語(yǔ)言編寫(xiě)的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線(xiàn)程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
主站蜘蛛池模板: 精品国产一区二区三区久久久蜜月 | 亚洲精品成人悠悠色影视 | 欧美成人三级视频 | 三片在线观看 | 99日韩精品视频 | 国产午夜精品一区 | 免费观看一级 | 亚洲日本乱码在线观看 | 日韩精品dvd| 午夜久久电影 | 久久亚洲精品视频 | 天天色宗合 | 毛片免费试看 | 18一20岁一级毛片 | 久久亚洲一区二区三区成人国产 | 国产真实孩交 | 精品一区二区三区在线视频 | 粉嫩粉嫩一区二区三区在线播放 | 3344永久免费 | 亚洲第一页在线观看 | 色屁屁xxxxⅹ免费视频 | 国产免费区 | 91快色视频| 亚洲二区三区在线 | 国产亚洲精品yxsp | 成人爱爱电影 | 久久免费视频一区二区三区 | 亚a在线| 美女亚洲综合 | 欧美一区二区三区免费不卡 | 午夜热门福利 | 免费亚洲视频在线观看 | 亚洲欧洲av在线 | av在线直播观看 | 久久17 | 91九色蝌蚪国产 | 美女毛片儿 | 精品欧美一区二区精品久久 | 成人黄色短视频在线观看 | 久久精品视频免费 | 日韩在线播放中文字幕 |