栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

gin对各种请求中的参数的处理

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gin对各种请求中的参数的处理

1、获取Get请求参数

Get请求示例 :

 /getUserInfo?id=1

获取请求参数所用函数

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

示例:

func Handler(c *gin.Context){
    //获取id参数,通过 Query 获取参数,返回string类型,没有则为空串
    idStr := c.Query("id")
    
    //获取 id 参数,通过 DefaultQuery 获取参数,返回string类型,没有则为defaultValue
    defaultValue := "xxx"
    idStr := c.DefaultQuery("id", defaultValue)
    
    //获取 id 参数,通过 GetQuery 获取参数,返回string类型,第二个参数,可判断是否存参数
    idStr, ok := c.GetQuery("id")
    if ok{
        fmt.Println("存在")
    }else{
        fmt.Println("不存在")
    }
}
    

Get请求示例:

/getUserInfo/:id/		--  /getUserInfo/1/

参数的处理

idStr := c.Param("id")
var id int
var err error
if idStr!= "" {
        id, err = strconv.Atoi(idStr)
        if err != nil {
            ginUtil.SendBadRequest(c, "cannot parse: id")
            return
        }
    }
2、Post参数的获取

从表单中获取数据
获取Post请求参数的常用函数

func (c *gin.Context) PostForm(key string) string
func (c *gin.Context) DefaultPostForm(key string, defaultValuen string) string
func (c *gin.Context) GetPostForm(key string) (string, bool)

示例:

func Hanlder(c *gin.Context){
    //从表单中获取,没有则为空""
    idStr := c.PostForm("id")
    
    //从表单中获取,没有则为默认值 "123"
    idStr := c.DefaultPostForm("id", "123")
    
    //从表单中获取,并且判断是否存在
    idStr, ok := c.GetPostForm("id")
    if !ok {
        // 参数不存在
    }
}
3、请求体中的参数

对于GET、POST、PATCH、PUT请求,对于请求体中的数据处理基本相同 (DELETE如果想处理请求体中的数据,就要使用POST请求处理)
body:

{
    "name":"stefan",
    "hobby":"soccer"
}

解析Json参数常用的三种方式,具体视情况而定:内部传递了一个binding.JSON来解析
• BindJson() 返回错误,并写400的状态码

func (c *Context) BindJSON(obj interface{}) error {
    return c.MustBindWith(obj, binding.JSON)
}

• ShouldBindJSON() 只会返回错误信息,不会写400的错误状态码

// ShouldBindJSON is a shortcut for c.ShouldBindWith(obj, binding.JSON).
func (c *Context) ShouldBindJSON(obj interface{}) error {
    return c.ShouldBindWith(obj, binding.JSON)
}
// ShouldBindWith binds the passed struct pointer using the specified binding engine.
// See the binding package.
func (c *Context) ShouldBindWith(obj interface{}, b binding.Binding) error {
    return b.Bind(c.Request, obj)
}

• ShouldBindWith() 根据b的类型去绑定json
⚠️ 除以上几种外还有很多处理方式,具体参考源码

示例:

func method(c *gin.Context){
    type Req struct{
        Name string `json:"name" binding:"required"`
        Hobby string `json:"hobby" binding:"required"`
    }
    var r Req
    // 选择那种解析方式具体情况来定
    if err := c.BindJson(&r); err != nil {
        //处理错误
    }
    //通过 r.Name     r.Hobby 使用数据
}

DELETE如果只根据id进行删除

/user/del/:id
idStr := c.Param("id")
var id int
var err error
if idStr!= "" {
        id, err = strconv.Atoi(idStr)
        if err != nil {
            ginUtil.SendBadRequest(c, "cannot parse: id")
            return
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号