Golang,GET和POST獲取請求參數處理


這里主要是以代碼為主的去處理 GET 和 POST 獲取請求參數處理,請求工具是Postman。

 

 

首先新建一個main.go文件
func main() {
   http.HandleFunc("/post", postHandler) http.HandleFunc("/get", getHandler) http.ListenAndServe(":8089", nil) }

 

一、GET請求處理

func getHandler(w http.ResponseWriter, r *http.Request) {
   fmt.Println("method:", r.Method) q := r.URL.Query() if len(q) != 0 { // 方式1:通過字典下標取值 fmt.Println("id1:", q["id"][0]) } // 方式2:使用Get方法,如果沒有值會返回空字符串 fmt.Println("id2:", q.Get("id")) w.Write([]byte("ok")) }
示例:
GET請求:http://localhost:8089/get?id=1

服務端打印出以下內容
method: GET id1: 1 id2: 1 服務端返回 ok 字符串 GET請求(不帶請求參數):http://localhost:8089/get  服務端打印出以下內容 method: GET id2: 服務端返回 ok 字符串 

 

 

二、POST請求處理

 

json 處理:處理請求提交的方法有很多,下面簡單的使用 json.NewDecoder 和 ioutil.ReadAll
請求示例:

 

POST http://localhost:8089/post
{
    "username":"xiaoming" }

 

json.NewDecoder 解析

 

// 結構體解析
func postHandler(w http.ResponseWriter, r *http.Request) {
   fmt.Println("method:", r.Method) // method: POST
   param := &struct { Username string `json:"username"` }{} // 通過json解析器解析參數 json.NewDecoder(r.Body).Decode(param) fmt.Println(fmt.Sprintf("%#v", param)) // &struct { Username string "json:\"username\"" }{Username:"xiaoming"}  w.Write([]byte("ok")) } 服務端打印內容: method: POST &struct { Username string "json:\"username\"" }{Username:"xiaoming"} // map解析 func postHandler(w http.ResponseWriter, r *http.Request) { fmt.Println("method:", r.Method) // method: POST var m map[string]interface{} json.NewDecoder(r.Body).Decode(&m) fmt.Println(m) // map[username:xiaoming]  w.Write([]byte("ok")) } 服務端打印內容: method: POST map[username:xiaoming]

 

ioutil.ReadAll 讀取

 

func postHandler(w http.ResponseWriter, r *http.Request) {
   fmt.Println("method:", r.Method) b, _ := ioutil.ReadAll(r.Body) fmt.Println("len(b):", len(b), "cap(b):", cap(b)) fmt.Println("body:", string(b)) w.Write([]byte("ok")) } 服務端打印內容: method: POST len(b): 31 cap(b): 512 body: { "username":"xiaoming" }

 

form-data 處理:

 

POST http://localhost:8089/post

 

 

fmt.Println("val:", r.PostFormValue("username"))
fmt.Println("val2:", r.FormValue("username")) // 讀取文件 //r.FormFile("file")  服務端打印內容: method: POST val: xiaoyan val2: xiaoyan

 

PUT、PATH、DELETE的請求可以參考上面的 GET 和 POST 的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM