本文小编为大家详细介绍“Golang验证器之validator怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang验证器之validator怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Validator
是一个 Golang 的第三方库,用于对数据进行校验,常用于 API 的开发中,对客户端发出的请求数据进行严格校验,防止恶意请求。validator包安装:导入validator:validator 应用了 Golang
的 Struct Tag
和 Reflect
机制,基本思想是:在 Struct Tag
中为不同的字段定义各自类型的约束,然后通过 Reflect
获取这些约束的类型信息并在校验器中进行数据校验。示例:validator包的验证提示默认是英文的,输出如下:这样看可能不太清楚,如果需要翻译成中文则还需安装验证提示翻译包:修改后如下:执行输出:下面列举一部分我们开发中经常用到的验证规则validator 允许定义跨字段验证,即:验证某个字段与其他字段之间的关系。这种验证实际上分为两种:一种是参数字段就是同一个结构体中的平级字段。另一种是参数字段为结构中其他字段的字段。验证语法很简单,如果是验证同一个结构中的字段,则在基础的 Tags 后面添加一个 field 后缀,例如:eqfield 定义字段间的相等(eq)约束。如果是更深层次的字段,在 field 之前还需要加上 cs(Cross-Struct),eq 就变为了 eqcsfield。eqfield=Field:必须等于 Field 的值。nefield=Field:必须不等于 Field 的值。gtfield=Field:必须大于 Field 的值。gtefield=Field: 必须大于等于 Field 的值。ltfield=Field:必须小于 Field 的值。ltefield=Field:必须小于等于 Field 的值。eqcsfield=Other.Field:必须等于 struct Other 中 Field 的值。necsfield=Other.Field:必须不等于 struct Other 中 Field 的值。gtcsfield=Other.Field:必须大于 struct Other 中 Field 的值;gtecsfield=Other.Field:必须大于等于 struct Other 中 Field 的值。ltcsfield=Other.Field:必须小于 struct Other 中 Field 的值。ltecsfield=Other.Field:必须小于等于 struct Other 中 Field 的值。另外还有几个常用的 Tag:required_with=Field1 Field2:在 Field1 或者 Field2 存在时,必须;required_with_all=Field1 Field2:在 Field1 与 Field2 都存在时,必须;required_without=Field1 Field2:在 Field1 或者 Field2 不存在时,必须;required_without_all=Field1 Field2:在 Field1 与 Field2 都存在时,必须;通过看源码,我们可以看到validator 返回的错误有两种,一种是参数错误,一种是校验错误,它们都实现了 error 接口。参数错误时,返回 InvalidValidationError 类型;校验错误时,返回 ValidationErrors 类型。ValidationErrors 是一个错误切片,保存了每个字段违反的每个约束信息。所以 validator 校免费云主机域名验返回的结果有 3 种情况:nil:没有错误;InvalidValidationError:输入参数错误;ValidationErrors:字段违反约束。validator 返回的错误有两种,一种是参数错误,一种是校验错误,它们都实现了 error 接口。参数错误时,返回 InvalidValidationError 类型;校验错误时,返回 ValidationErrors 类型。ValidationErrors 是一个错误切片,保存了每个字段违反的每个约束信息。所以 validator 校验返回的结果只有 3 种情况:nil:没有错误;InvalidValidationError:输入参数错误;ValidationErrors:字段违反约束。我们可以在程序中判断 err != nil
时,可以依次将 err转换为 InvalidValidationError
和 ValidationErrors
以获取更详细的信息:读到这里,这篇“Golang验证器之validator怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
这篇文章主要讲解了“Java枚举类如何使用”,文中的讲解内容简免费云主机域名单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java枚举类如何使用”吧!枚举类的对象可以有类里面定义,不支持重新new出来,枚举类有构造函数,其他的类都…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。