关于validator:golang-validator-包的使用指北

看到 validator 咱们第一反馈会想起啥?见名知意我就能够晓得他是一个验证器,如果用过 gin web 框架的同学,天然是用过 gin 外面的 validator,只不过 gin 中应用的关键字是 binding 去做标识 单刀直入Validator 实际上是一个验证工具,属于 golang 的第三方包,这个包中应用了各种反射技巧来提供了各种校验和束缚数据的形式办法,十分实用,罕用的有这些: 根本的字段长度,大小,范畴的束缚 len:束缚参数长度eq:数值等于参数值max:数值小于等于参数值min:数值大于等于参数值ne:不等于参数值gt:大于参数值,gte:大于等于参数值lt:小于参数值, lte:小于等于参数值oneof:只能是枚举值中的一个,这些值必须是数值或字符串,以空格分隔,如果字符串中有空格,则应用单引号突围。例如:oneof=changsha beijing haerbing<!----> 是否必选,是否跳过,是否疏忽 -:跳过该字段| :应用多个束缚,只须要满足其中一个,例如:xxx| xxxrequired:必选束缚,不能为默认值omitempty:如果字段未设置,则疏忽它<!----> 各种格局束缚如 emailurlip、ipv4、ipv6uuiddatetimejsonfile , 参数必须是一个非法的文件门路罕用的大略有上述这些,咱们也不须要去背,只须要晓得如何去应用,以及咱们须要解决数据校验的时候,可能想到 validator 库就行了,切实记不起来看官网文档或者看本篇文章的例子就能够了,这个是官网: validator package - github.com/go-playground/validator/v10 - Go Packages 应用应用 validator 工具, 天然是为了进步咱们的开发效率以及让咱们写进去的内容更加优雅和强壮 如果咱们本人每一个字段都显示的去校验是否合乎咱们预期,那么代码大概率会很臃肿,来一个简略的 demo,举个栗子 package mainimport ( "fmt" "github.com/go-playground/validator/v10")type Data struct { City string `validate:"min=8,max=15"` Name string `validate:"min=6,max=10"` Addr string `validate:"url"` Age int `validate:"gte=18,lte=100"` Tall int `validate:"required"` IpAddr string `validate:"ipv4"` Email string `validate:"email"` Content string `validate:"json"` CreateTime string `validate:"datetime=2006-01-02"` NewPwd string `validate:"min=8"` RePwd string `validate:"eqfield=NewPwd"`}func main() { // 示例 , 根本应用介绍 validate := validator.New() demo1 := Data{ City: "changsha11111111111111", Name: "xiaozhu", Addr: "xxxxxxxxx", Age: 25, Tall: 185, IpAddr: "xxxxxxxxxxx", Email: "helloworld@qq.com", Content: "{"name":"xiaozhu"}", CreateTime: "xxxxx2006-03-02", NewPwd: "12345", RePwd: "123456789xxxxx", } err := validate.Struct(demo1) if err == nil { fmt.Println("params check success") return } invalid, ok := err.(*validator.InvalidValidationError) if ok { fmt.Println("param invalid : ", invalid) return } valiErrs := err.(validator.ValidationErrors) for _, valiErr := range valiErrs { fmt.Println(valiErr) }}此处咱们能够看到咱们在 Data 数据结构中,对其成员进行了不同的束缚,置信通过 xdm 看到 Data 构造中的 validate 标识前面的束缚,就晓得响应字段的束缚是啥意思了 ...

September 10, 2023 · 2 min · jiezi

java-bean-属性验证框架-valid

项目介绍java 开发中,参数校验是非常常见的需求。 但是 hibernate-validator 在使用过程中,依然会存在一些问题。 特性支持 fluent-validation支持 jsr-303 注解支持 i18n支持用户自定义策略支持用户自定义注解开源地址valid创作目的hibernate-validator 无法满足的场景如今 java 最流行的 hibernate-validator 框架,但是有些场景是无法满足的。 比如: 验证新密码和确认密码是否相同。(同一对象下的不同属性之间关系)当一个属性值满足某个条件时,才进行其他值的参数校验。多个属性值,至少有一个不能为 null其实,在对于多个字段的关联关系处理时,hibernate-validator 就会比较弱。 本项目结合原有的优点,进行这一点的功能强化。 validation-api 过于复杂validation-api 提供了丰富的特性定义,也同时带来了一个问题。 实现起来,特别复杂。 然而我们实际使用中,常常不需要这么复杂的实现。 valid-api 提供了一套简化很多的 api,便于用户自行实现。 自定义缺乏灵活性hibernate-validator 在使用中,自定义约束实现是基于注解的,针对单个属性校验不够灵活。 本项目中,将属性校验约束和注解约束区分开,便于复用和拓展。 过程式编程 vs 注解式编程hibernate-validator 核心支持的是注解式编程,基于 bean 的校验。 一个问题是针对属性校验不灵活,有时候针对 bean 的校验,还是要自己写判断。 本项目支持 fluent-api 进行过程式编程,同时支持注解式编程。 尽可能兼顾灵活性与便利性。 项目模块说明模块名称说明valid-api核心 api 及注解定义valid-core针对 valid-api 的核心实现valid-jsr针对 JSR-303 标准注解的实现valid-test测试代码模块依赖说明valid-core 默认引入 valid-api valid-jsr 默认引入 valid-core 快速开始准备工作JDK1.7+ Maven 3.X+ maven 引入<dependency> <groupId>com.github.houbb</groupId> <artifactId>valid-jsr</artifactId> <version>0.1.2</version></dependency>例子我们直接利用 jsr 内置的约束类: ...

October 13, 2019 · 6 min · jiezi

字节跳动开源Go结构体标签表达式解释器,成请求参数校验的杀手锏

go-tagexpr 是一个由字节跳动开源的 Golang 结构体标签表达式解释器。它主要应用于各种场景的请求参数校验,且性能高效,成为参数校验的杀手锏。主要特性:支持各种常用运算符支持访问数组、切片、字典的成员支持访问当前结构中任意字段支持访问嵌套字段、非导出字段等内置 len、sprintf、regexp 函数支持单表达式与多表达式两种定义模式提供了参数校验子包看一个参数校验的小例子:package validator_testimport ( “fmt” “github.com/bytedance/go-tagexpr/validator”)func Example() { var vd = validator.New(“vd”) type InfoRequest struct { Name string vd:"($!='Alice'||(Age)$==18) &amp;&amp; regexp('\\w')" Age int vd:"$&gt;0" } info := &InfoRequest{Name: “Alice”, Age: 18} fmt.Println(vd.Validate(info) == nil) // Output: // true}更多语法详情,请转到Github源码仓库:https://github.com/bytedance/…

January 30, 2019 · 1 min · jiezi