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

我是高朗的新手。


高朗版本: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 main


type 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)

        }

    }


}

有没有一种直接的方法来验证一片结构中的项目?


阿波罗的战车
浏览 153回答 1
1回答

月关宝盒

根据validator package 的文档,您可以dive在 struct 标记中使用来获得此行为。这会导致验证器也验证嵌套的结构/切片/等。所以你需要将你的User结构更新为:type User struct {    Name       string    Address    *Address `validate:"required"`    Children   []*Child `validate:"dive"`    IsEmployed *bool    `validate:"required"`}它在Go Playground中工作
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go