Dev*_*evO 6 validation go go-structtag
我一直在使用 Go Validator.v2 进行字段验证,它非常适合我的非结构类型字段。但是,当涉及到处理基于结构的字段(在原始结构内)时,没有任何相关文档。https://pkg.go.dev/mod/gopkg.in/validator.v2
我知道 v10 支持它,但我更喜欢 v2 中的内置正则表达式支持。无论如何,我可以为这些基于结构的字段自定义验证吗?例如
type user struct {
Name string `validate:"nonzero"`
Age int `validate:"min=21"`
BillingAddress *Address ???
}
Run Code Online (Sandbox Code Playgroud)
我希望验证 BillingAddress 字段(如上所示),还是我只需在Address模型中写入验证标记,它也会自动验证它?
谢谢并感谢任何指点!
验证器包将递归搜索结构。只需确保嵌套结构的字段不是匿名的并且具有标签即可validate。
如果您发现自己对某个软件包的功能迷失了方向,请查看他们的测试文件,它可能会揭示一些东西。例如,验证器包测试在此处有一个嵌套结构的示例。
例子:
package main
import (
"log"
"gopkg.in/validator.v2"
)
type Address struct {
Val string `validate:"nonzero"`
}
type User struct {
Name string `validate:"nonzero"`
Age int `validate:"min=21"`
BillingAddress *Address
}
func main() {
nur := User{Name: "something", Age: 21, BillingAddress: &Address{Val: ""}}
err := validator.Validate(&nur)
log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)
2022/11/10 10:32:43 BillingAddress.Val: zero value
Run Code Online (Sandbox Code Playgroud)