Golang validator自定义枚举验证规则

oug3syen  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(257)

我正在使用https://github.com/go-playground/validator,我需要为不同的枚举值创建自定义验证规则。下面是我的结构-https://go.dev/play/p/UmR6YH6cvK9。正如你所看到的,我有3个不同的用户类型管理员,版主和内容创建者,我想为他们调整不同的密码规则。例如管理员,密码长度应至少为7个符号,而版主应至少为5个符号。是否可以通过go-playground/validator中的标签实现此操作?
我的服务获取用户列表,需要使用不同的规则进行验证

hm2xizp9

hm2xizp91#

您可以向UserType添加一个方法,该方法使用validator包来验证用户。

type UserType int

const (
    Admin UserType = iota
    Moderator
    ContentCreator
)

func (u UserType) Validate() error {
    switch u {
    case Admin:
        // validate admin
    case Moderator:
        // validate moderator
    case ContentCreator:
        // validate content creator
    default:
        return fmt.Errorf("invalid user type")
    }
    return nil
}

调用validate将如下所示

func main() {
    a := User{
        Type:         Admin,
        Name:         "admin",
        Password:     "pass",
        LastActivity: time.Time{},
    }

    err := a.Type.Validate()
    if err != nil {
        fmt.Println("invalid user: %w", err)
    }
}

相关问题