为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:验证切片项中的结构字段

Golang:验证切片项中的结构字段

Go
阿波罗的战车 2022-12-19 21:31:17
我是高朗的新手。高朗版本: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中工作


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号