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