处理 Go Validator.v2 中的嵌套结构

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模型中写入验证标记,它也会自动验证它?

谢谢并感谢任何指点!

wil*_*200 0

验证器包将递归搜索结构。只需确保嵌套结构的字段不是匿名的并且具有标签即可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)