go語言web系列1 接收請求的引數
阿新 • • 發佈:2018-12-22
package main import ( "net/http" "fmt" "net/url" "io/ioutil" "encoding/json" "log" ) /** * Form:儲存了post、put和get引數,在使用之前需要呼叫ParseForm方法 * PostForm:儲存了post、put引數,在使用之前需要呼叫ParseForm方法 * MultipartForm:儲存了包含了檔案上傳的表單的post引數,在使用前需要呼叫ParseMultipartForm方法 */ /** * r.Form是url.Values字典型別 * r.Form["id"]取到的是一個數組型別 * 因為http.request在解析引數的時候會將同名的引數都放進同一個數組裡,所以這裡要用[0]獲取到第一個 */ func getdemo1(w http.ResponseWriter, r *http.Request) { r.ParseForm() if len(r.Form["id"]) > 0 { fmt.Fprintln(w, r.Form["id"][0]) } else { fmt.Fprint(w, "獲取get請求引數出錯") } } /** * 當url引數和post引數都有id時 getdemo1的方法會出現錯誤 * 因為r.Form包含了get和post引數 並且以post引數為先 所以應當會取到post引數 */ func getdemo2(w http.ResponseWriter, r *http.Request) { queryForm, err := url.ParseQuery(r.URL.RawQuery) if err == nil && len(queryForm["id"]) > 0 { // 事實上這個也是標準庫ParseForm中關於get引數解析程式碼 fmt.Fprintln(w, queryForm["id"][0]) } else { fmt.Fprint(w, "獲取get請求引數出錯") } } /** * 普通的post表單請求,Content-Type=application/x-www-form-urlencoded */ func postdemo1(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, r.PostFormValue("id")) } /** * 有檔案上傳的表單,Content-Type=multipart/form-data * 這個未走通 */ func postdemo2(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(32 << 20) if r.MultipartForm != nil { values := r.MultipartForm.Value["id"] if len(values) > 0 { fmt.Fprintln(w, values[0]) } } } func jsondemo1(w http.ResponseWriter, r *http.Request) { var user map[string]interface{} body, _ := ioutil.ReadAll(r.Body) json.Unmarshal(body, &user) fmt.Fprintln(w, user) //fmt.Fprintln(w, user["password"]) //fmt.Println("獲取json中的username:", user["username"]) //fmt.Println("獲取json中的password:", user["password"].(string)) //轉字串通過len(password)!=0判斷長度 } func main() { http.HandleFunc("/getdemo1", getdemo1) http.HandleFunc("/getdemo2", getdemo2) http.HandleFunc("/postdemo1", postdemo1) http.HandleFunc("/postdemo2", postdemo2) http.HandleFunc("/jsondemo1", jsondemo1) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }