我是高朗的新手。高朗版本: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 關注
- 177 瀏覽
添加回答
舉報
0/150
提交
取消