golang server示例

一個簡單的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

四種常見的 POST 提交數據方式code

相關文章
相關標籤/搜索