You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:42:08