本章介绍Gin框架获取请求参数的方式json
Get请求url例子:/path?id=1234&name=Manu&value=111app
获取Get请求参数的经常使用函数:框架
例子:函数
func Handler(c *gin.Context) { //获取name参数, 经过Query获取的参数值是String类型。 name := c.Query("name") //获取name参数, 跟Query函数的区别是,能够经过第二个参数设置默认值。 name := c.DefaultQuery("name", "sockstack") //获取id参数, 经过GetQuery获取的参数值也是String类型, // 区别是GetQuery返回两个参数,第一个是参数值,第二个参数是参数是否存在的bool值,能够用来判断参数是否存在。 id, ok := c.GetQuery("id") if !ok { // 参数不存在 } }
提示:GetQuery函数,判断参数是否存在的逻辑是,参数值为空,参数也算存在,只有没有提交参数,才算参数不存在。
获取Post请求参数的经常使用函数:post
例子:url
func Handler(c *gin.Context) { //获取name参数, 经过PostForm获取的参数值是String类型。 name := c.PostForm("name") // 跟PostForm的区别是能够经过第二个参数设置参数默认值 name := c.DefaultPostForm("name", "sockstack") //获取id参数, 经过GetPostForm获取的参数值也是String类型, // 区别是GetPostForm返回两个参数,第一个是参数值,第二个参数是参数是否存在的bool值,能够用来判断参数是否存在。 id, ok := c.GetPostForm("id") if !ok { // 参数不存在 } }
获取URL路径参数,指的是获取 /user/:id 这类型路由绑定的参数,这个例子绑定了一个参数id。code
获取url路径参数经常使用函数:orm
例子:xml
r := gin.Default() r.GET("/user/:id", func(c *gin.Context) { // 获取url参数id id := c.Param("id") })
前面获取参数的方式都是一个个参数的读取,比较麻烦,Gin框架支持将请求参数自动绑定到一个struct对象,这种方式支持Get/Post请求,也支持http请求body内容为json/xml格式的参数。对象
例子:
下面例子是将请求参数绑定到User struct对象。
// User 结构体定义 type User struct { Name string `json:"name" form:"name"` Email string `json:"email" form:"email"` }
经过定义struct字段的标签,定义请求参数和struct字段的关系。
下面对User的Name字段的标签进行说明。
struct标签说明:
标签 | 说明 |
---|---|
json:"name" | 数据格式为json格式,而且json字段名为name |
form:"name" | 表单参数名为name |
提示:你能够根据本身的须要选择支持的数据类型,例如须要支持json数据格式,能够这样定义字段标签: json:"name"
下面看下控制器代码:
r.POST("/user/:id", func(c *gin.Context) { // 初始化user struct u := User{} // 经过ShouldBind函数,将请求参数绑定到struct对象, 处理json请求代码是同样的。 // 若是是post请求则根据Content-Type判断,接收的是json数据,仍是普通的http请求参数 if c.ShouldBind(&u) == nil { // 绑定成功, 打印请求参数 log.Println(u.Name) log.Println(u.Email) } // http 请求返回一个字符串 c.String(200, "Success") })
ShouldBind有一系列函数,大体就是把前面的方式绑定到结构体的方式,如:ShouldBindUri()、ShouldBindQuery()等等,用法和ShouldBind相似,这里就不展开介绍了
提示:若是你经过http请求body传递json格式的请求参数,而且经过post请求的方式提交参数,则须要将 Content-Type设置为 application/json, 若是是xml格式的数据,则设置为 application/xml
获取请求头的经常使用函数:
例子:
func Handler(c *gin.Context) { //获取请求头Host的值 host := c.GetHeader("Host") //控制台输出host的值 fmt.Println(host) }
r := gin.Default() r.GET("/ip", func(c *gin.Context) { // 获取用户IP ip := c.ClientIP() })
出处 gin从入门到实践更多精彩文章,请关注个人博客 SOCKSTACK,分享个人工做经验。