Goland使用validator进行结构体参数校验

validator是Goland里常用的表单校验工具。表单校验的作用就是对输入的数据进行合法判断,如果不合法,那没就会输出错误。

1. go web应用中,我们使用 struct tag 来定义表单合法的值

在web开发中一个不可避免的环节就是对请求参数进行校验,通常我们会定义一个DTO(数据模型)结构体来接收请求的参数。借助波形绑定跨界的解析请求中的参数。

gin框架中集成了github.com/go-playground/validator进行参数校验,我们只需要在定义结构体是使用bindingtag标识相关校验规则,更多详尽的使用参照validator github文档。

如果有多个校验条件,可以用,(英文逗号),他们是 AND 的关系
如果想要 OR 的关系,那么使用 |

2. 基本使用

type SignParam struct {
	Age        uint8  `json:"age" binding:"gte=1,lte=120"`    // 年龄要大于等于1,且小于等于120
	Name       string `json:"name" binding:"required"`    // 名字字段不能为空
	Email      string `json:"email" binding:"required,email"`    // 邮箱不能为空,且匹配邮箱格式是否正确
	Password   string `json:"password" binding:"required"`    // 密码不能为空
	RePassword string `json:"re_password" binding:"required,eqfield=Password"`    // 确认密码不能为空,且确认密码要与密码相同
}

注: 当你binding该字段设置required后,当你传入该类型的零值时会出错,validator并不认为你传入了值。

2.1 一些常用的校验
  • email 邮件
  • url 链接
  • json JSON
  • file 文件路径
  • base64 Base64
  • containsany=!@#?, contains=@, containsrune=@ 都表示包含
  • excludes=@, excludesall=!@#?, excludesrune=@ 都表示不包含
  • startswith=helloendswith=goodbye 表示字符串的起始和结束是否等于值
  • latitudelongitude 分别表示是否是纬度和经度
  • ip, ipv4, ipv6 分别表示对应的IP地址类型
  • datetime=2006-01-02 表示是否是这种格式的日期字符串
  • uuid, uuid3, uuid4, uuid5 表示是否是对应的UUID类型
  • lowercaseuppercase 表示是否是对应的小写或者大写
  • gt, lt 分别是大于和小于,eq 表示等于,gte表示大于等于,lte表示小于等于
  • oneof=‘red green’ ‘blue yellow’, oneof=5 7 9 表示是其中一个值
  • min, max 表示其值是否满足此表达式
  • required 表示此项是必填的,不能为0值
  • - 忽略此属性,即不校验此属性

你可能感兴趣的:(Goland使用validator进行结构体参数校验)