go原生和gin獲取http請求參數整理

原生

Urlencoded Form

即content-type 為 x-www-form-urlencode的數據。

r.Form["param"]
r.PostForm["param"]
r.FormValue("param")
r.PostFormValue("param")

其中r.Form和r.PostForm必須在調用ParseForm之后,才會有數據,否則則是空數組。
而r.FormValue和r.PostFormValue("lang")無需ParseForm的調用就能讀取數據。

MutilpartFrom

即content-type為form-data的數據使用ParseMutilpartFrom方法解析參數,但是不會解析url query的參數的

r.Form["param"]
r.PostForm["param"]
r.FormValue("param")
r.PostFormValue("param")
r.MultipartForm.Value["param"]

r.MultipartForm.File包含圖片數據
r.FormFile可以直接讀取上傳文件數據

gin

Parameters in path
func main() {
    router := gin.Default()

    // This handler will match /user/john but will not match neither /user/ or /user
    router.GET("/user/:name", func(c *gin.Context) {
        name := c.Param("name")
        c.String(http.StatusOK, "Hello %s", name)
    })

    // However, this one will match /user/john/ and also /user/john/send
    // If no other routers match /user/john, it will redirect to /user/john/
    router.GET("/user/:name/*action", func(c *gin.Context) {
        name := c.Param("name")
        action := c.Param("action")
        message := name + " is " + action
        c.String(http.StatusOK, message)
    })

    router.Run(":8080")
}
Querystring parameters
func main() {
    router := gin.Default()

    // Query string parameters are parsed using the existing underlying request object.
    // The request responds to a url matching:  /welcome?firstname=Jane&lastname=Doe
    router.GET("/welcome", func(c *gin.Context) {
        firstname := c.DefaultQuery("firstname", "Guest")
        lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname")

        c.String(http.StatusOK, "Hello %s %s", firstname, lastname)
    })
    router.Run(":8080")
}
Multipart/Urlencoded Form
func main() {
    router := gin.Default()

    router.POST("/form_post", func(c *gin.Context) {
        message := c.PostForm("message")
        nick := c.DefaultPostForm("nick", "anonymous")

        c.JSON(200, gin.H{
            "status":  "posted",
            "message": message,
            "nick":    nick,
        })
    })
    router.Run(":8080")
}
query + post form
func main() {
    router := gin.Default()

    router.POST("/post", func(c *gin.Context) {

        id := c.Query("id")
        page := c.DefaultQuery("page", "0")
        name := c.PostForm("name")
        message := c.PostForm("message")

        fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)
    })
    router.Run(":8080")
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,934評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • HTTP全稱為HyperText Transfer Protocol,從名字不難看出這是一種基于文本的網絡協(xié)議,對...
    MrPeak閱讀 1,615評論 3 21
  • 請求的結構 HTTP的交互以請求和響應的應答模式。go的請求我們早就見過了,handler函數的第二個參數http...
    人世間閱讀 36,734評論 6 24
  • HTTP請求中,如果是get請求,那么表單參數以name=value&name1=value1的形式附到url的后...
    安易學車閱讀 1,603評論 0 1

友情鏈接更多精彩內容