go validator常见用法记录

go validator是一个很强大的库,但是它的文档写得实在是垃圾到不能再垃圾,虽然列出了所有支持的key,但是完全没有写清楚value的语法,全靠用户瞎猜,甚至多个命名相似的key也没写清楚区别,key的说明又是直接翻译了key的名字,等于没说,用哪个就全靠用户盲试,有的人可能会说它提供了demo,但它的demo只有基础的几个key,少得可怜,天知道我是怎么试出来“字段要么不存在,要么必须是1或2或3”的语法是"omitempty,oneof=1 2 3"而不是oneof=1|2|3或oneof=[1,2,3]的,感谢ChatGPT,ChatGPT真是人类编程史上最伟大的发明。

字段要么不存在,要么必须是1或2或3

binding:"omitempty,oneof=1 2 3"

字段必须存在

binding:"required"

两个字段必须成对出现

// 注意:required_with后面的值必须和字段名相同,而不是和标签名相同
PageSize       *int     `form:"page_size" binding:"required_with=PageNum"` // 当前页大小,必须与PageNum成对出现或都不出现
PageNum        *int     `form:"page_num" binding:"required_with=PageSize"` // 第几页,从1开始,必须与PageSize成对出现或都不出现

两个字段要么都不出现,要么都出现且大于0

// 注意:binding后面的标签是有顺序的,如果写成binding:"omitempty,required_with=Size,gt=0",就变成先校验omitempty,如果传了Size没传Page,也会被omitempty校验通过
// 注意:omitempty是必须的,如果写成binding:"required_with=Size,gt=0",如果没传Size也没传Page,required_with校验通过后,gt校验会不通过
Page          *int64   `form:"page" binding:"required_with=Size,omitempty,gt=0"`  // 分页查询,第几页(从1开始)
Size          *int64   `form:"size" binding:"required_with=Page,omitempty,gt=0"` // 分页查询,每页大小

校验数组里的每个元素

Types []string `form:"types" binding:"dive,oneof=cvm,vmserver"`
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值