简介
validator的作用做数据验证,能对结构体中的字段进行验证。比如结构体中有账号、密码,一般需要检查密码的长度是否满足要求,是否有大小写等等。
安装
go get github.com/go-playground/validator/v10
使用
validator通过检查结构体标签,来判断数据是否满足要求。
`validate:"tag1,tag2"`
语法:标签以validate为前缀,类似json,多个验证用逗号隔开。以下示例:
type P struct{
//Name的长度不能小于6,不能大于22.
Name string `validate:"min=6,max=22"`
}
注意:字段必须以大写字母开头,不然无法被验证库获取。
validator有很多tag。下面说一些比较常用的标签。
判断是否为空
- required:字段不能为类型0值。
判断长度
- min: 字段的最小长度。常用于密码校验。
- max: 字段的最大长度。同min使用一样。
- len: 字段必须与指定的长度一致,否则验证失败。
判断内容
- eq: 验证string或者数值类型的值是否相等.
- ne: 验证string或数值类型的值是否不相等。
- eqfiled: 与另一个字段的值是否相等.
- nefiled: 与另一个字段的值是否不相等。
判断数值大小
- gt: 是否大于给定的数值.如果判断类值是
time.TIme,会根据当前时间来判断。 - gte: 大于等于.如果是time.TIme,同上.
- lt: 是否小于.
- lte: 小于等于.
自定义错误消息
在v9之前,validator验证失败返回的错误信息很难看。
"Key: 'User.Password' Error:Field validation for 'Password' failed on the 'min' tag"
更新到v9之后,可以将晦涩难懂的信息转换为一目了然的文字。
如果要将错误信息转换为中文,将en改成zh,对应的包也改成zh。
import (
"fmt"
"github.com/go-playground/locales/en"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator.v10"
en_translations "github.com/go-playground/validator/v10/translations/en"
)
en := en.New()
uni = ut.New(en, en)
trans, _ := uni.GetTranslator("en")
validate = validator.New()
en_translations.RegisterDefaultTranslations(validate, trans)
err := validate.Struct(user)
if err != nil {
errs := err.(validator.ValidationErrors)
//转换出来的errs是个map,因为可能包含多个字段的错误提示。
fmt.Println(errs.Translate(trans))
}
常见配置
type User struct{
Name string `validate:"required"`//Name不为能空
Age int `validate:"gt=0"`//Age必须大于0
}
func main(){
validate :=validator.New()
user := &User{
Name: "",
Age: 30
}
validate.Struct(user)
}