简介
今天我们来介绍一个非常实用的库——validator
。validator
用于对数据进行校验。在 Web 开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。
快速使用
先安装:
$ go get gopkg.in/go-playground/validator.v10
后使用:
package main
import (
"fmt"
"gopkg.in/go-playground/validator.v10"
)
type User struct {
Name string `validate:"min=6,max=10"`
Age int `validate:"min=1,max=100"`
}
func main() {
validate := validator.New()
u1 := User{Name: "lidajun", Age: 18}
err := validate.Struct(u1)
fmt.Println(err)
u2 := User{Name: "dj", Age: 101}
err = validate.Struct(u2)
fmt.Println(err)
}
validator
在结构体标签(struct tag
)中定义字段的约束。使用validator
验证数据之前,我们需要调用validator.New()
创建一个验证器,这个验证器可以指定选项、添加自定义约束,然后通过调用它的Struct()
方法来验证各种结构对象的字段是否符合定义的约束。
在上面代码中,我们定义了一个结构体User
,User
有名称Name
字段和年龄Age
字段。通过min
和max
约束,我们设置Name
的字符串长度为[6,10]
之间,Age
的范围为[1,100]
。
第一个对象Name
和Age
字段都满足约束,故Struct()
方法返回nil
错误。第二个对象的Name
字段值为dj
,长度 2,小于最小值min
,Age
字段值为 101,大于最大值max
,故返回错误:
<nil>
Key: 'User.Name' Error:Field validation for 'Name' failed on the 'min' tag
Key: 'User.Age' Error:Field validation for 'Age' failed on the 'max' tag
错误信息比较好理解,User.Name
违反了min
约束,User.Age
违反了max
约束,一眼就能看出问题所在。
注意:
validator
已经更新迭代了很多版本,当前最新的版本是v10
,各个版本之间有一些差异,大家平时在使用和阅读代码时要注意区分。我这里使用最新的版本v10
作为演示版本;- 字符串长度和数值的范围都可以通过
min
和max
来约束。
约束
validator
提供了非常丰富的约束可供使用,下面依次来介绍。
范围约束
我们上面已经看到了使用min
和max
来约束字符串的长度或数值的范围,下面再介绍其它的范围约束。范围约束的字段类型有以下几种:
- 对于数值,则约束其值;
- 对于字符串,则约束其长度;
- 对于切片、数组和
map
,则约束其长度。
下面如未特殊说明,则是根据上面各个类型对应的值与参数值比较。
len
:等于参数值,例如len=10
;max
:小于等于参数值,例如max=10
;min
:大于等于参数值,例如min=10
;eq
:等于参数值,注意与len
不同。对于字符串,eq
约束字符串本身的值,而len
约束字符串长度。例如eq=10
;ne
:不等于参数值,例如ne=10
;gt
:大于参数值,例如gt=10
;gte
:大于等于参数值,例如gte=10
;lt
:小于参数值,例如lt=10