登录
首页 >  Golang >  Go问答

用 Golang 实现自定义结构的验证器

来源:stackoverflow

时间:2024-03-21 19:45:27 138浏览 收藏

在 Go 中,使用 go-validator 验证自定义结构时,可以通过添加 "dive" 验证标签来验证切片中的嵌套结构。例如,如果一个项目结构包含一个规则切片字段,则可以在规则切片上使用 "dive" 验证标签,以便验证器深入切片并验证每个规则结构。

问题内容

我正在尝试使用 golang 验证器 (https://godoc.org/gopkg.in/go-演示/validator.v9) 来验证请求正文。我有两个实体,规则和项目。 item 实体依赖于 rule 实体。

type rule struct {
    ruleno      int64     `json:"ruleno" db:"rule_no"`
    category    string    `json:"category" db:"category" validate:"alphanum"`
    createdat   time.time `json:"createdat" db:"created_at"`
    updatedat   time.time `json:"updatedat" db:"updated_at"`
}

type item struct {
    seqno       int64     `json:"-" db:"item_restriction_no"`
    itemid      string    `json:"itemid" db:"item_id" validate:"alphanum"`
    itemtype    string    `json:"itemtype" db:"item_type" validate:"alphanum"`
    rules       []rule    `json:"rules" db:"rules"` // how to validate this field?
    createdat   time.time `json:"createdat" db:"created_at"`
    updatedat   time.time `json:"updatedat" db:"updated_at"`
}

如何验证请求正文是否具有项目结构的“规则”字段的规则列表?这是我的验证函数:

func (item *Item) Validate() error {
    v := validator.New()
    if err := v.Struct(item); err != nil {
        return err
    }
    return nil
}

解决方案


从示例 here 中,您可以执行如下操作:

type rule struct {
    ...
}
type item struct {
    ...
    rules []rule `json:"rules" db:"rules" validate:"required"`
    ...
}

您可以使用 dive 告诉验证器深入切片:

Rules       []Rule    `json:"rules" db:"rules" validate:"dive"`

今天关于《用 Golang 实现自定义结构的验证器》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>