Golang Gookit Validate全局自定义验证器无法触发问题求助
Gookit Validate自定义验证器未触发的解决方法
Gookit Validate 默认会跳过空值字段的非required验证规则。你的代码中Payment字段为空字符串,且未添加required规则,因此自定义的payment_method验证器根本不会被执行,导致验证始终返回成功。
方案一:为字段添加required规则
修改结构体的validate标签,将required和自定义验证器规则一起添加,确保空值字段也会触发验证流程:
type Sample struct { Name string `json:"name" validate:"required"` Addres string `json:"address" validate:"required"` Payment string `json:"payment" validate:"required,payment_method"` }
此时空值会先触发required验证失败,后续自定义验证器也会执行(不过required已经报错,整体验证结果已经是失败)。
方案二:修改自定义规则的SkipOnEmpty属性
使用validate.AddRule代替AddValidator,显式设置SkipOnEmpty: false,让空值字段也执行自定义验证:
validate.AddRule("payment_method", &validate.Rule{ ValidateFunc: func(val interface{}) bool { value, ok := val.(string) fmt.Println(value) if !ok { return false } return value == "hello" }, SkipOnEmpty: false, // 强制空值不跳过验证 })
这种方式不需要添加required规则,空值会直接进入自定义验证逻辑,验证不通过时返回失败。
测试验证
如果使用方案二,当Payment字段为空字符串时,自定义验证器会被触发,因为空字符串不等于"hello",验证会失败,控制台会输出对应的错误信息。
内容的提问来源于stack exchange,提问作者Apin
相关产品推荐
相关产品推荐

