get请求的参数是直接加在url后面的,在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法,示例代码如下
router.GET("/welcome", func(c *gin.Context) {
// 获取get请求的参数,如果没有,可以指定默认值
firstName := c.DefaultQuery("firstname", "Guest")
// 获取get请求的参数,如果没有,则为空
lastName := c.Query("lastname")
c.JSON(http.StatusOK, gin.H{
"first_name": firstName,
"last_name": lastName,
})
})
在浏览器中输入全部参数的运行如下:
如果不输入参数,运行结果如下:
post表单的获取方式是DefaultPostForm()和PostForm()两个函数,如下所示:
router.POST("/form_post", func(c *gin.Context) {
// 获取post表单请求的参数,如果没有,可以指定默认值
message := c.DefaultPostForm("message", "Guest")
// 获取post表单请求的参数,如果没有,则为空
nick := c.PostForm("nick")
c.JSON(http.StatusOK, gin.H{
"message": message,
"nick": nick,
})
})
在请求中输入全部参数的结果
在浏览器中不输入参数的结果
上面的示例中,我们都是从gin的入参gin.Context中直接获取的,其实我们可以直接将对应的参数转成一个实例对象,这样更加方面我们的开发,具体做法如下:
type FormMessage struct {
Message string `form:"message"`
Nick string `form:"nick"`
}
router.POST("/form_post_struct", func(c *gin.Context) {
var message FormMessage
// 绑定数据
c.Bind(&message)
c.JSON(http.StatusOK, gin.H{
"message": message.Message,
"nick": message.Nick,
})
})
输入全部参数的返回结果
不传参数的结果
在我们实际开发中,经常是用json的数据来传递的,但是上面的方式对与json数据是获取不到数据的,如下所示:
那在gin中如何获取json传入的数据呢?
其实方法很简单,只需要将上面步骤中绑定的表单数据的tag中的form字符串换成json,就可以接受json数据了
type FormMessage struct {
Message string `json:"message"`
Nick string `json:"nick"`
}
这时候重启项目,我们输入json数据,就能获取到json传入的值了
后记
??个人总结,欢迎转载、评论、批评指正