字符串类验证:contains, startswith, lowercase, uppercase, len=X, min, max
数值比较器:gt, gte, lt, lte
集合验证:dive、slice、array 校验
跨字段验证:eqfield, nefield
格式相关:email, uuid, datetime 等
而且验证器还能组合多个条件:
, 表示 AND(全部满足)
| 表示 OR(满足其中一个即可)
基础使用方式
只需要在结构体的 tag 中,通过 binding 声明验证规则即可。 例如下面代码中,把 age 限制为大于 18 并小于 30,email 字段必须是合法 email,并且全部字段必填:
1 2 3 4 5
type Person struct { Name string`form:"name" binding:"required"` Age int`form:"age" binding:"required,gt=18,lt=30"` Email string`form:"email" binding:"required,email"` }
type Person struct { Name string`form:"name" binding:"required"` Age int`form:"age" binding:"required,gt=18,lt=30"` Email string`form:"email" binding:"required,email"` }
funcmain() { r := gin.Default()
r.GET("/user", func(c *gin.Context) { var person Person if err := c.ShouldBind(&person); err != nil { c.JSON(400, gin.H{ "error": err.Error(), }) return } c.JSON(200, gin.H{ "message": fmt.Sprintf("you name is %s, age is %d, email is %s", person.Name, person.Age, person.Email), "person": person, }) })