首页 >后端开发 >Golang >Golang 验证器自定义枚举验证规则

Golang 验证器自定义枚举验证规则

王林
王林转载
2024-02-09 08:06:33675浏览

Golang 验证器自定义枚举验证规则

php小编小新今天给大家介绍一款强大的Golang验证器——自定义枚举验证规则。随着Golang的流行,越来越多的开发者开始使用它来构建高效、可靠的应用程序。而验证器是其中一个重要的工具,它可以帮助我们验证输入的数据是否符合规定的格式和要求。自定义枚举验证规则是验证器的一个重要功能,它可以帮助我们定义自己的枚举类型,并对输入的数据进行验证。通过本文,我们将详细介绍如何在Golang中使用自定义枚举验证规则,以及一些实际应用场景。让我们一起来探索这个强大的功能吧!

问题内容

我正在使用 https://github.com/go-playground/validator,我需要为不同的枚举值创建自定义验证规则。这是我的结构 - https://go.dev/play/p/UmR6YH6cvK9。如您所见,我有 3 种不同的用户类型:管理员、版主和内容创建者,我想为他们调整不同的密码规则。例如,管理员的密码长度应至少为 7 个符号,而版主的密码长度应至少为 5 个。是否可以通过 go-playground/validator 中的标签来做到这一点?

我的服务获取用户列表,需要使用不同的规则进行验证

解决方法

您可以向 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)
    }
}

以上是Golang 验证器自定义枚举验证规则的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除