1.介绍
Gin 框架自定义验证器,分为字段级别验证器和结构体级别验证器。
其中结构体级别验证器,可以用于跨字段验证,也可以用于和字段级别验证器结合使用。
需要注意的是,结构体级别验证器的优先级小于字段级别验证器。
2.字段级别自定义验证器
定义字段级别验证器
示例代码:
阅读上面这段代码,我们定义一个 validator.Func 类型的函数变量,参数入参的类型是 validator.FieldLevel,返回结果是一个 bool 类型的变量。
函数体中,使用类型断言,获取字段的值,然后进行逻辑验证。
注册自定义验证器
示例代码:
阅读上面这段代码,我们使用 RegisterValidation 方法,注册自定义验证器 userValidator,该方法接收的第一个参数是用于结构体字段的 tag 名称,第二个参数是自定义验证器的函数名称。
需要注意的是,如果我们注册的验证器标签名(用于结构体字段的 tag 名称)已存在,则会被当前验证器函数替换掉。
使用自定义验证器
示例代码:
阅读上面这段代码,我们在请求参数结构体的字段中,添加我们注册自定义验证器时的标签名 user_validator,即可使用自定义验证器。
输出结果:
3.结构体级别自定义验证器
定义结构体级别验证器
示例代码:
阅读上面这段代码,我们定义一个函数,该函数接收一个 validator.StructLevel 类型的参数,函数体中使用类型断言,获取结构体的值,然后进行逻辑验证。
注册自定义验证器
示例代码:
阅读上面这段代码,我们使用 RegisterStructValidation 方法,注册自定义验证器 UserStructLevelValidation,该方法接收两个参数,分别是 StructLevelFunc 函数类型的自定义验证器,和需要验证的结构体类型。
使用自定义验证器
示例代码:
阅读上面这段代码,我们不需要在结构体字段标签中有任何操作,即可使用自定义结构体级别的验证器。
以下是结构体级别验证器单独使用,和结合字段级别验证器(标签验证器)一起使用的输出结果。
输出结果:
4.总结
本文我们介绍 Gin 框架怎么使用自定义验证器,分别列举了字段级别和结构体级别自定义验证器的使用方式。
需要注意的是,它们并不是线程安全的,需要在任何验证之前,先注册自定义验证器。