golang常用库:gorilla/mux-http路由库使用
golang常用库:配置文件解析库-viper使用
golang常用库:操作数据库的orm框架-gorm基本使用
golang常用库:字段参数验证库-validator使用
一、背景
在平常开发中,特别是在web应用开发中,为了验证输入字段的合法性,都会做一些验证操作。比如对用户提交的表单字段进行验证,或者对请求的API接口字段进行验证,验证字段的合法性,保证输入字段值的安全,防止用户的恶意请求。
一般的做法是用正则表达式,一个字段一个字段的进行验证。一个一个字段验证的话,写起来比较繁琐。那有没更好的方法,进行字段的合法性验证?有, 这就是下面要介绍的 validator 这个验证组件。
代码地址:
https://github.com/go-playground/validator
文档地址:
https://github.com/go-playground/validator/blob/master/README.md
二、功能介绍
这个验证包 github.com/go-playground/validator 验证功能非常多。
标记之间特殊符号说明
- 逗号(
,
):把多个验证标记隔开。注意
:隔开逗号之间不能有空格,validate:"lt=0,gt=100"
,逗号那里不能有空格,否则panic - 横线(
-
):跳过该字段不验证 - 竖线(
|
):使用多个验证标记,但是只需满足其中一个即可 - required:表示该字段值必输设置,且不能为默认值
- omitempty:如果字段未设置,则忽略它
范围比较验证
doc: https://github.com/go-playground/validator/blob/master/README.md#comparisons
范围验证: 切片、数组和map、字符串,验证其长度;数值,验证大小范围
- lte:小于等于参数值,
validate:"lte=3"
(小于等于3) - gte:大于等于参数值,
validate:"lte=0,gte=120"
(大于等于0小于等于120) - lt:小于参数值,
validate:"lt=3"
(小于3) - gt:大于参数值,
validate:"lt=0,gt=120"
(大于0小于120) - len:等于参数值,
validate:"len=2"
- max:大于等于参数值,
validate:"max=2"
(大于等于2) - min:小于等于参数值,
validate:"min=2,max=10"
(大于等于2小于等于10) - ne:不等于,
validate:"ne=2"
(不等于2) - oneof:只能是列举出的值其中一个,这些值必须是数值或字符串,以空格分隔,如果字符串中有空格,将字符串用单引号包围,
validate:"oneof=red green"
例子:
type User struct { Name string `json:"name" validate:"min=0,max=35"` Age unit8 `json:"age" validate:"lte=0,gte=90"` }
更多功能请参看文档 validator comparisons doc
字符串验证
doc: https://github.com/go-playground/validator/blob/master/README.md#strings
- contains:包含参数子串,
validate:"contains=tom"
(字段的字符串值包含tom) - excludes:包含参数子串,
validate:"excludes=tom"
(字段的字符串值不包含tom) - startswith:以参数子串为前缀,
validate:"startswith=golang"
- endswith:以参数子串为后缀,
validate:"startswith=world"
例子:
type User struct { Name string `validate:"contains=tom"` Age int `validate:"min=1"` }
更多功能请参看文档 validator strings doc
字段验证
doc: https://github.com/go-playground/validator/blob/master/README.md#fields
eqcsfield:跨不同结构体字段验证,比如说 Struct1 Filed1,与结构体Struct2 Field2相等,
type Struct1 struct { Field1 string `validate:eqcsfield=Struct2.Field2` Struct2 struct { Field2 string } }
- necsfield:跨不同结构体字段不相等
- eqfield:同一结构体字段验证相等,最常见的就是输入2次密码验证
type User struct { Name string `validate:"lte=4"` Age int `validate:"min=20"` Password string `validate:"min=10"` Password2 string `validate:"eqfield=Password"` }
nefield:同一结构体字段验证不相等
type User struct { Name string `validate:"lte=4"` Age int `validate:"min=20"` Password string `validate:"min=10,nefield=Name"` }
- gtefield:大于等于同一结构体字段,
golang常用库之字段参数验证库-validator使用详解
扫一扫手机访问
