我是高朗的新手。高朗版本:1.17.8验证器:“ github.com/go-playground/validator/v10 ”我想在加载到嵌套结构数据结构后验证传入的 JSON 有效负载。这是我传入的 JSON 负载, { "name": "Yomiko", "address": { "city": "Tokyo", "street": "Shibaura St" }, "children":[ { "lastName": "Takayashi" } ], "isEmployed": false }这是我的 user.go 文件,package maintype User struct { Name string Address *Address `validate:"required"` Children []*Child IsEmployed *bool `validate:"required"`}type Address struct { City string `validate:"required"` Street string `validate:"required"`}type Child struct { Title string `validate:"required"` FirstName string LastName string `validate:"required"`}这是我的测试功能,func TestUserPayload(t *testing.T) { actualUserPayload := NewUserPayloadFromFile("userpayload.json") validate := validator.New() err := validate.Struct(actualUserPayload) if err != nil { t.Error("Validation Error: ", err) }}这个测试通过。但是,我预计它会失败,因为Child.Title被标记为required。我预计会出现以下错误,Validation Error: Key: 'Child.Title' Error:Field validation for 'Title' failed on the 'required' tag但是,当我循环遍历子切片并按如下方式验证每个子结构时,测试按预期失败,func TestUserPayload(t *testing.T) { actualUserPayload := NewUserPayloadFromFile("userpayload.json") validate := validator.New() err := validate.Struct(actualUserPayload) if err != nil { t.Error("Validation Error: ", err) } children := actualUserPayload.Children for _, child := range children { err := validate.Struct(child) if err != nil { t.Error("Validation Error: ", err) } }}有没有一种直接的方法来验证一片结构中的项目?
1 回答

月关宝盒
TA贡献1772条经验 获得超5个赞
根据validator package 的文档,您可以dive在 struct 标记中使用来获得此行为。这会导致验证器也验证嵌套的结构/切片/等。
所以你需要将你的User结构更新为:
type User struct {
Name string
Address *Address `validate:"required"`
Children []*Child `validate:"dive"`
IsEmployed *bool `validate:"required"`
}
它在Go Playground中工作
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消