今天了解了一下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语言框架