我一直在使用Go Validator.v2进行字段验证,它非常适合我的非结构类型字段。然而,当涉及到处理基于结构的字段(在原始结构中(时,没有任何关于它的文档。https://pkg.go.dev/mod/gopkg.in/validator.v2
我知道v10支持它,但我更喜欢v2中内置的regex支持。我是否可以为这些基于结构的字段自定义验证?例如
type user struct {
Name string `validate:"nonzero"`
Age int `validate:"min=21"`
BillingAddress *Address ???
}
我希望如上所示验证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)
}
2022/11/10 10:32:43 BillingAddress.Val: zero value