登录
首页 >  Golang >  Go问答

go-validator 如何检查字段是否为零值?

来源:stackoverflow

时间:2024-03-17 19:54:28 323浏览 收藏

go-validator 提供了一种方法来检查字段是否为零值,同时允许可选配置。对于可选字段,可以使用“validate:”标签跳过验证,或者使用不同的标签进行不同的验证条件。这允许开发人员在不同情况下灵活地验证结构,同时确保必需字段已填充。

问题内容

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

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

type Setting struct {
    Val string
}

请参阅 https://play.golang.org/p/p_6qy7h64so 演示。

换句话说:我可以创建一个包含针对嵌套结构触发的验证规则所需的嵌套结构的字段,同时具有相同嵌套结构类型的不同字段可选吗?

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

更新我注意到了 structonly 标签,但文档很粗略,我无法让它按照上面的描述工作。


解决方案


情况1如果你想跳过可选结构

我想你需要这个

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

请注意 validate:"-" 将跳过该字段的验证

Go Playground

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

情况 2 如果您想在不同情况下进行可选验证

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

您可以使用不同的标签进行第二个验证器,如下所示

package main

import (
    "fmt"

    "github.com/go-playground/validator"
)

// Config : Config Struct
type Config struct {
    Required Setting
    Optional Setting
}

// Setting : Setting Struct
type Setting struct {
    Val string `validate:"required" valid:"omitempty,len=5"`  //<---- See This
}

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)

    fmt.Println("Second Validator")
    // New Validator
    validate2 := validator.New()

    validate2.SetTagName("valid") //<---- See This
    err = validate2.Struct(val1)
    fmt.Println(err)

    val1.Optional.Val = "Hel"
    err = validate2.Struct(val1)
    fmt.Println(val1, err)

    val1.Optional.Val = "Hello"
    err = validate2.Struct(val1)
    fmt.Println(val1, err)

}

Go Playground

到这里,我们也就讲完了《go-validator 如何检查字段是否为零值?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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