这里主要整理了 gin 常用的表单参数验证语法,方便开发者快速查询最常用的语法。
gin的表单参数验证语法引用了第三方包:https://github.com/go-playground/validator

1.基本语法示例,我们以用户注册的结构体为例进行示范说明

  1. type Register struct {
  2. UserName string `form:"user_name" json:"user_name" binding:"required,min=1"`
  3. Pass string `form:"pass" json:"pass" binding:"required,min=6,max=20"`
  4. Phone string `form:"phone" json:"phone"`
  5. CardNo string `form:"card_no" json:"card_no"`
  6. }

在以上结构体中:
form:表示验证 form 表单提交的字段。
json:表示通过 json 方式(postman中就是 raw 方式,本质仍然是 application/json 编码方式)提交的数据字段。
binding:任何需要验证的字段首先需要设置 binding 标签,然后指定语法。
注意:在 ginskeleton 中,json 标签是必须都要指定的,因为 ginskeleton 依赖于 json 标签后续做了参数绑定到上下文的功能,form 标签只有表单参数以 form-data 方式提交时是必须的。

常用的验证语法清单:

  1. // 给出一些最常用的验证规则:
  2. //required 必填;
  3. //len=11 长度=11;
  4. //min=3 如果是数字,验证的是数据范围,最小值为3,如果是文本,验证的是最小长度为3,
  5. //max=6 如果是数字,验证的是数字最大值为6,如果是文本,验证的是最大长度为6
  6. // mail 验证邮箱
  7. //gt=3 对于文本就是长度>=3
  8. //lt=6 对于文本就是长度<=6
  9. // one of= 1 2 参数必须是其中之一,对于int系列类型、string 类型使用,float系列类型不适用,会报错
  10. // eqfield 等于另一个字段,常用语注册账号时,password 字段和 re_password 字段一致性校验

2.复杂表单参数验证,主要是结构体嵌套结构体方式(客户端往往以 raw 、application/json 方式提交)

  1. type Demo struct {
  2. No int `form:"no" json:"no" binding:"required"`
  3. Title string `form:"title" json:"title" binding:"required"`
  4. List []List `form:"artitle_list" json:"artitle_list" binding:"required,min=2,dive"`
  5. }
  6. // 以下结构体被嵌套
  7. type List struct {
  8. SubTitle string `form:"sub_title" json:"sub_title" binding:"required"`
  9. Remark string `json:"remark" binding:"required"`
  10. }

在以上结构体中我们解释几个关键点:
List:对应的 min 表示该数组至少有2个成员结构体(对象)
dive:表示深入该数组内部继续验证每一个结构体对应的字段。

验证效果演示:
nested_json.png