您的位置 首页 golang

gin请求参数处理

本章介绍Gin框架获取请求参数的方式

1.获取Get 请求参数

Get请求url例子:/path?id=1234&name=Manu&value=111

获取Get请求参数的常用函数:

  • func (c *Context) Query(key string) string
  • func (c *Context) DefaultQuery(key, defaultValue string) string
  • func (c *Context) GetQuery(key string) (string, bool)

例子:

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函数,判断参数是否存在的逻辑是,参数值为空,参数也算存在,只有没有提交参数,才算参数不存在。

2.获取Post请求参数

获取Post请求参数的常用函数:

  • func (c *Context) PostForm(key string) string
  • func (c *Context) DefaultPostForm(key, defaultValue string) string
  • func (c *Context) GetPostForm(key string) (string, bool)

例子:

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 {        // 参数不存在    }}

3.获取URL路径参数

获取URL路径参数,指的是获取 /user/:id 这类型路由绑定的参数,这个例子绑定了一个参数id。

获取url路径参数常用函数:

  • func (c *Context) Param(key string) string

例子:

r := gin.Default()    r.GET("/user/:id", func(c *gin.Context) {    // 获取url参数id    id := c.Param("id")})

4.将请求参数绑定到struct对象

前面获取参数的方式都是一个个参数的读取,比较麻烦,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

5.获取请求头信息

获取请求头的常用函数:

  • func (c *Context) GetHeader(key string) string

例子:

func Handler(c *gin.Context) {    //获取请求头Host的值    host := c.GetHeader("Host")    //控制台输出host的值    fmt.Println(host)}

6.获取客户IP

r := gin.Default()    r.GET("/ip", func(c *gin.Context) {    // 获取用户IP    ip := c.ClientIP()})

出处gin从入门到实践更多精彩文章,请关注我的博客SOCKSTACK,分享我的工作经验。


文章来源:智云一二三科技

文章标题:gin请求参数处理

文章地址:https://www.zhihuclub.com/5913.shtml

关于作者: 智云科技

热门文章

评论已关闭

2条评论

  1. – Cialis Mvbnex Amoxicilina Free Shipping In Internet Derby Shpsze Vfsedc biblioth ques sp cialis es urbanisme – Cialis

网站地图