Gin的参数校验器validator
安装
1 | go get github.com/go-playground/validator/v10 |
使用
gin自带参数检查机制,通过validator
库实现参数检查,通过打tag binding:""
实现
1 | package main |
在检查结构体参数的时候,也可以直接通过validator
来检查参数是否合理
1 | type User struct { |
或者有单独验证的需求,可以设置一个特殊的验证器,例如验证电话号码是否是一个正常的电话号码: example code
1 | type User struct { |
常用的参数检查
字符串约束
1 | excludesall:不包含参数中任意的 UNICODE 字符 |
范围约束
- 对数值,可以约束值
- 对切片、数组、map,可以约束长度
- 对string,可以约束长度
1 | ne:不等于参数值,一般作用于数值 |
Fields约束
1 | eqfield:定义字段间的相等约束,用于约束同一结构体中的字段。前提是两个字段类型一致。 |
常用约束
1 | unique:指定唯一性约束,不同类型处理不同: validate:"unique" |
更多的约束方式,可以在官网中查看:validator
自定义结构体校验
例如创建约束方式
1 | func timing(fl validator.FieldLevel) bool { |
注册约束
1 | err := v.RegisterValidation("timing", timing) |
字段约束
1 | Date time.Time `validate:"timing,required"` |
国际化
在弹出的报错中,响应如下
1 | Key: 'User.Name' Error:Field validation for 'Name' failed on the 'min' tag |
一眼不好看出来,validate
包自带翻译功能,可以将报错翻译成不同的语言。
例如中文
1 | zhT := zh.New() //chinese |
报错断言
1 | errs, ok := err.(validator.ValidationErrors) |
在实际的代码中,可以通过header中传入的语言类型进行判断,注册不同的校验语言
支持的语言在 github.com/go-playground/validator/v10/translations/
中可以看到。
例如
1 | package main |
此时报错如下
1 | { |
暴露出结构体内部信息,因此,还需要再修饰一下
1 | package main |
参考文档:gin框架对前端传递过来的数据进行校验