Gin框架获取参数
1、querystring,的是URL中?后面攜帶的參數,例如:/user/search?username=小王子&address=沙河。 獲取請求的querystring參數的方法如下。c.Query
username := c.DefaultQuery("username", "小王子") //username := c.Query("username") address := c.Query("address") //輸出json結果給調用方 c.JSON(http.StatusOK, gin.H{"message": "ok","username": username,"address": address, })2、獲取form參數,當前端請求的數據通過form表單提交時,例如向/user/search發送一個POST請求,獲取請求數據的方式如下。c.PostForm
username := c.PostForm("username")address := c.PostForm("address")//輸出json結果給調用方c.JSON(http.StatusOK, gin.H{"message": "ok","username": username,"address": address,})3、獲取json參數,當前端請求的數據通過JSON提交時,例如向/json發送一個POST請求,則獲取請求參數的方式如下。c.GetRawData()
b, _ := c.GetRawData() // 從c.Request.Body讀取請求數據// 定義map或結構體var m map[string]interface{}// 反序列化_ = json.Unmarshal(b, &m)c.JSON(http.StatusOK, m)4、獲取path參數,請求的參數通過URL路徑傳遞,例如:/user/search/小王子/沙河。 獲取請求URL路徑中的參數的方式如下。c.Param
username := c.Param("username")address := c.Param("address")//輸出json結果給調用方c.JSON(http.StatusOK, gin.H{"message": "ok","username": username,"address": address,})5、參數綁定,為能夠更方便的獲取請求的相關參數,可以基于請求的Content-Type識別請求數據類型并利用反射機制自動提取請求中QueryString、form表單、JSON、XML,并把值綁定到指定的結構體對象。c.showbind
// Binding from JSON type Login struct {User string `form:"user" json:"user" binding:"required"`Password string `form:"password" json:"password" binding:"required"` }func main() {router := gin.Default()// 綁定JSON的示例 ({"user": "q1mi", "password": "123456"})router.POST("/loginJSON", func(c *gin.Context) {var login Loginif err := c.ShouldBind(&login); err == nil {fmt.Printf("login info:%#v\n", login)c.JSON(http.StatusOK, gin.H{"user": login.User,"password": login.Password,})} else {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})}})// 綁定form表單示例 (user=q1mi&password=123456)router.POST("/loginForm", func(c *gin.Context) {var login Login// ShouldBind()會根據請求的Content-Type自行選擇綁定器if err := c.ShouldBind(&login); err == nil {c.JSON(http.StatusOK, gin.H{"user": login.User,"password": login.Password,})} else {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})}})// 綁定QueryString示例 (/loginQuery?user=q1mi&password=123456)router.GET("/loginForm", func(c *gin.Context) {var login Login// ShouldBind()會根據請求的Content-Type自行選擇綁定器if err := c.ShouldBind(&login); err == nil {c.JSON(http.StatusOK, gin.H{"user": login.User,"password": login.Password,})} else {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})}})// Listen and serve on 0.0.0.0:8080router.Run(":8080") }showbind會按照下面的順序解析請求中的數據完成綁定:
總結
- 上一篇: 安卓系统曝漏洞!有人可能正在用你的手机秘
- 下一篇: gomod和govendor的简单理解