Gin框架-参数绑定
大约 2 分钟
参数绑定
使用binding可以很好的完成参数的绑定
查询参数
r.GET("", func(c *gin.Context) {
type User struct {
Name string `form:"name"`
Age int `form:"age"`
}
var user User
err := c.ShouldBindQuery(&user)
fmt.Println(user, err)
})
路径绑定
r.GET("users/:id/:name", func(c *gin.Context) {
type User struct {
Name string `uri:"name"`
ID int `uri:"id"`
}
var user User
err := c.ShouldBindUri(&user)
fmt.Println(user, err)
})
表单参数
r.POST("form", func(c *gin.Context) {
type User struct {
Name string `form:"name"`
Age int `form:"age"`
}
var user User
err := c.ShouldBind(&user)
fmt.Println(user, err)
})
JSON参数
r.POST("json", func(c *gin.Context) {
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
var user User
err := c.ShouldBindJSON(&user)
fmt.Println(user, err)
})
Header参数
r.POST("header", func(c *gin.Context) {
type User struct {
Name string `header:"Name"`
Age int `header:"Age"`
UserAgent string `header:"User-Agent"`
ContentType string `header:"Content-Type"`
}
var user User
err := c.ShouldBindHeader(&user)
fmt.Println(user, err)
})
Binding内置规则
// 不能为空,并且不能没有这个字段
required: 必填字段,如:binding:"required"
// 针对字符串的长度
min 最小长度,如:binding:"min=5"
max 最大长度,如:binding:"max=10"
len 长度,如:binding:"len=6"
// 针对数字的大小
eq 等于,如:binding:"eq=3"
ne 不等于,如:binding:"ne=12"
gt 大于,如:binding:"gt=10"
gte 大于等于,如:binding:"gte=10"
lt 小于,如:binding:"lt=10"
lte 小于等于,如:binding:"lte=10"
// 针对同级字段的
eqfield 等于其他字段的值,如:PassWord string `binding:"eqfield=Password"`
nefield 不等于其他字段的值
- 忽略字段,如:binding:"-"
// 枚举 只能是red 或green
oneof=red green
// 字符串
contains=fengfeng // 包含fengfeng的字符串
excludes // 不包含
startswith // 字符串前缀
endswith // 字符串后缀
// 数组
dive // dive后面的验证就是针对数组中的每一个元素
// 网络验证
ip
ipv4
ipv6
uri
url
// uri 在于I(Identifier)是统一资源标示符,可以唯一标识一个资源。
// url 在于Locater,是统一资源定位符,提供找到该资源的确切路径
// 日期验证 1月2号下午3点4分5秒在2006年
datetime=2006-01-02