微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go-Validator如何检查字段的零值?

如何解决Go-Validator如何检查字段的零值?

我正在尝试使用https://github.com/go-playground/validator,并且需要确保用户配置具有填充的内部结构(即非零),同时仍允许可选配置:

type Config struct {
    required Setting `validate:"required"`
    Optional Setting
}

type Setting struct {
    Val string
}

在操场上见https://play.golang.org/p/P_6qY7H64sO

换句话说:我可以使包含嵌套结构的字段成为针对嵌套结构触发的验证规则所必需的,而具有相同嵌套结构类型的其他字段是可选的吗?

如果可选字段结构的任何字段都不为零,则仍应对其进行验证(即,可选字段已填充,因此需要验证)。

更新我注意到structonly标记,但是文档是粗略的,我无法如上所述使它正常工作。

解决方法

案例1如果要跳过可选的结构

我认为您需要这个

<inbound>
    <base />
    <set-body>@{
        string[] carList = context.Request.Headers["Authorization"].First().Split(' ')[1].AsJwt()?.Claims["carlist"];
        string resultVar = "";
        foreach(string value in carList)
        {
            if (value == "BMW") {
                resultVar = "true";
                break;
            }else {
                resultVar = "false";
            }
        }
        return resultVar;
    }</set-body>
</inbound>

请注意package main import ( "fmt" "github.com/go-playground/validator" ) // Config : Config Struct type Config struct { Required Setting Optional Setting `validate:"-"` } // Setting : Setting Struct type Setting struct { Val string `validate:"required"` } func main() { val1 := Config{ Required: Setting{Val: "Hello"},} val2 := Config{ Optional: Setting{Val: "Hello"},} validate := validator.New() err := validate.Struct(val1) fmt.Println(err) err = validate.Struct(val2) fmt.Println(err) } 将跳过对该字段的验证

Go Playground

================================================ ====================

案例2如果要在不同情况下进行可选验证

或者如果您想使用相同的结构在不同的条件下进行不同的验证

您可以像这样用不同的标签做第二个验证器

validate:"-"

Go Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。