一個簡單的web服務器html
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe("localhost:8888", nil)) } func handler(w http.ResponseWriter, r *http.Request) { fmt.Println("url.path is ", r.URL.Path) }
簡單看下Request結構體中幾個重要成員web
type Request struct { // Form contains the parsed form data, including both the URL // field's query parameters and the POST or PUT form data. // This field is only available after ParseForm is called. // The HTTP client ignores Form and uses Body instead. Form url.Values // PostForm contains the parsed form data from POST, PATCH, // or PUT body parameters. // // This field is only available after ParseForm is called. // The HTTP client ignores PostForm and uses Body instead. PostForm url.Values // MultipartForm is the parsed multipart form, including file uploads. // This field is only available after ParseMultipartForm is called. // The HTTP client ignores MultipartForm and uses Body instead. MultipartForm *multipart.Form }
獲取get參數json
func handler(w http.ResponseWriter, r *http.Request) { r.ParseForm() fmt.Println("value of param key is:", r.Form.Get("key")) }
獲取post參數服務器
提交方式: application/x-www-form-urlencodedapp
func handler(w http.ResponseWriter, r *http.Request) { r.ParseForm() fmt.Println("value of param key is:", r.PostFormValue("key")) }
提交方式: jsonpost
type RequestParm struct { Name string `json:"name"` Age int `json:"age"` ScoreList []int `json:"score_list"` } // NewDecoder func handler(w http.ResponseWriter, r *http.Request) { req := &RequestParm{} err := json.NewDecoder(r.Body).Decode(req) if err != nil { fmt.Println("json decode error") return } fmt.Println(req) } // Unmarshal func handler(w http.ResponseWriter, r *http.Request) { req := &RequestParm{} body, err := ioutil.ReadAll(r.Body) if err != nil { panic(err) } err = json.Unmarshal(body, req) if err != nil { panic(err) } fmt.Println(req) }
參考資料url