- 忽略
| 或
omitempty 有则验证,空值则不验证
dive 潜入到切片、数组、映射中,例如 NumList []int `validate:"len=2,dive,gt=18"` //切片长度为2,潜入切片后,里面的成员必须大于18
required 、 required_with[_all]、 required_without[_all] //required_with表示指定字段有值,则本字段必须有值;required_without表示指定字段没有值时,本字段必须有值;指定字段有值,则本字段有值无值都可以。
len 数字时等效于eq, 字符串时等效字符串长度(是rune长度,比如"世界"或"sj"都满足len=2的约束),切片或映射的话是元素的个数
max、min
eq、ne、{l|g}t[e]
oneof 例如 oneof=male female
alpha alphanum numeric hexadecimal
file 文件是否存在
contains(包含某个字符) containsany(包含任意一个给定字符串中的字符) containsrune excludes excludesall(不包含给定字符串中的所有字符) excludesrune
ip ipv4 ipv6 cidr cidrv{4|6} {tc|ud}p[{4|6}]_addr(就是多了端口号验证) fqdn eth_addr 可解析的IP地址(测试发现没觉得和ipv4、ipv6、ip标签有什么不同):ip[{4|6}]_addr mac
email url uri base64 base64url(因为base64的+和/在url中有特殊意义) uuid uuid3 uuid4 uuid5
startswith( 以什么开始) endswith(以什么结束) v9版本及其之后才能支持
ascii asciiprint multibyte(多字节,比如汉字,注意:如果是空,校验也能通过)
v9版本支持:file dir unique alphaunicode alphanumunicode startswith endswith html html_encoded url_encoded
例子:
type user struct { Name string `validate:"eq=bob|eq=tony"` //Name取值必须为bob或tony Age int64 `validate:"gte=6,lte=13"` //Age取值必须为 6~13岁之间,可以用max=13,min=6代替 CodeList []string `validate:"omitempty,gte=3,dive,len=2,hexadecimal"` //CodeList要么没有值,要么至少三个成员,dive潜入成员:成员长度必须位2字节,16进制的。
}
type Output struct{ Enable bool FileName string `validate:"required_with=Enable"` //当Enable==true时,FileName必须存在 MaxSize int `validate:"required_with=Enable, gt=2"` //当Enable==true时,MaxSize必须存在,且大于2 }
其他:
map验证: Info map[string]string `validate:"gt=0,dive,keys,eq=Name|eq=Alias,endkeys,required"` //gt=0表示map成员大于0, keys和endkeys中间的部分用来验证键,键名必须是Name和Alias,最后的required作用于值
Last int `validate:"gtcsfield=Sub.Age"` //Last字段比Sub这个子结构下的Age要大
unique //保证切片、数组的元素唯一,映射的值唯一
latitude longitude //纬度、经度