如何在 golang 中使用 ozzo 验证执行条件所需的验证?

Cru*_*yro 0 validation go

在 Golang ozzo-validation 中,如何验证依赖于另一个字段的字段?

例如,如果我有以下内容:

return validation.ValidateStruct(&c,
      validation.Field(&c.Name, validation.Required, validation.Length(5, 20)),

      validation.Field(&c.Gender, validation.In("Female", "Male")),

      validation.Field(&c.Email, is.Email),

      validation.Field(&c.Address),
Run Code Online (Sandbox Code Playgroud)

如何添加验证,仅当电子邮件不为空时才需要地址?

jee*_*tkm 5

您可以通过两种方式实现它 -

  • 添加您自己的自定义规则
  • FieldRules根据前置条件值有条件地添加Email,即在创建字段规则时进行检查,然后将其提供给validation.ValidateStruct

例如:

type Sample struct {
    Name    string
    Gender  string
    Email   string
    Address Address
}

type Address struct {
    // ... fields
}

func (s Sample) Validate() error {
    var fieldRules []*validation.FieldRules

    fieldRules = append(fieldRules, validation.Field(&s.Name, validation.Required, validation.Length(5, 20)))
    fieldRules = append(fieldRules, validation.Field(&s.Gender, validation.In("Female", "Male")))
    fieldRules = append(fieldRules, validation.Field(&s.Email, is.Email))

    if len(strings.TrimSpace(s.Email)) > 0 {
        fieldRules = append(fieldRules, validation.Field(&s.Address, validation.Required))
        fieldRules = append(fieldRules, validation.Field(&s.Address))
    }

    return validation.ValidateStruct(&s, fieldRules...)
}
Run Code Online (Sandbox Code Playgroud)