gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:10:31 25 4
gpt4 key购买 nike

我正在尝试使用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如果要跳过可选的struct
我想你需要这个

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

关于validation - Go-Validator如何检查字段的零值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64093143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com