Struct 默认值对 required 规则的影响
Struct 的属性会有 默认值,在某些情况下会引起 required 规则的失效。例如:
type User struct {
Name string `v:"required"`
Age uint `v:"required"`
}
在该结构体校验中, Age 属性的 required 校验将会失效,因为 Age 即便没有输入也会有默认值 0。
这里有三种解决方案:
- (推荐)使用
Struct校验的Assoc联合校验方法设置联合校验参数,在校验Struct类型参数时,参数值将以Assoc方法中给定的参数为准执行校验。如果使用框架的Server,采用结构化的API输入输出(XxxReq/XxxRes),那么Server将会自动调用Assoc执行校验,开发者无需担心默认值的影响。 - 使用组合校验规则来弥补默认值对
required规则,例如以上示例中将Age属性的校验规则修改为required|min:1将能达到业务校验的效果。 - 将属性改为指针类型,例如
*int、*float64、*g.Var等,通过指针类型默认值为nil的特点绕过了这个问题。