gopkg.in/go-playground/validator中比较有用的标签

忽略
|  或
omitempty 有则验证,空值则不验证
dive  潜入到切片、数组、映射中,例如 NumList []int `validate:"len=2,dive,gt=18"` //切片长度为2,潜入切片后,里面的成员必须大于18
requiredrequired_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  //纬度、经度

原文地址:https://www.cnblogs.com/mind-water/p/11065046.html