Gin框架学习——自定义bind函数

491 阅读2分钟

今天了解了一下Gin框架中的绑定,感觉用起来十分的方便

例如如需对一个结构体中的一个成员变量进行json绑定,只需要在其后面加上json:"绑定的名称"就可以了,并且学习了bind函数如何自定义,这在对参数进行绑定时可以校验

例如下面这一个例子,在对用户进行绑定时,首先判断是否年满18岁,同时gin框架还自带一些bind函数例如required,下面这个例子是对于v10版本的自定义绑定函数的构造,相对于v8更加的简便

type UserForm struct {
   Id int `uri:"id"`
   Name string `json:"name"`
   Age int `json:"age" binding:"mybind"`
   Sex bool `json:"sex"`
}

func mybind (fl validator.FieldLevel) bool{
   if fl.Field().Interface().(int) < 18 { //是否年满18岁
      return false
   }
   return true
}

func main() {
   r := gin.Default() //携带基础中间件的形式启动

   if v,ok := binding.Validator.Engine().(*validator.Validate);ok{
      v.RegisterValidation("mybind",mybind)
   }

   r.POST("/testBind/:id", func(c *gin.Context) {
      var userForm UserForm //定义接收信息的结构体
      err := c.ShouldBindJSON(&userForm) //使用json绑定
      err2 := c.ShouldBindUri(&userForm) //使用uri进行绑定
      if err != nil && err2 != nil{
         c.JSON(200,gin.H{ //json返回
            "msg" : "出错了",
            "data" : gin.H{},
         })
      }else {
         c.JSON(200,gin.H{
            "msg" : "success",
            "data" : userForm,
         })
      }
   })
   r.Run(":8080") // listen and serve on 0.0.0.0:8080
}

绑定例子:
err := c.ShouldBindJSON(&userForm) //使用json绑定
err2 := c.ShouldBindUri(&userForm) //使用uri进行绑定

此方法中,会自动将传输过来的json中key值对应的value与传入的结构体中相关属性进行绑定,如果发生错误会产生一个err

在结构体中的使用:
type UserForm struct {
Id int uri:"id"
Name string json:"name"
Age int json:"age" binding:"mybind"
Sex bool json:"sex"
}

作用:在后端接口使用json格式进行传输时,通常会将同一类的json串,与一个结构体进行影射,此时就需要使用绑定了,将json与结构体绑定,便于开发

本文正在参加技术专题18期-聊聊Go语言框架