首页 > 后端开发 > Golang > 正文

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

王林
发布: 2024-02-09 08:06:33
转载
606 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!