You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### validator 表单参数验证器语法介绍
> 1.本篇将选取表单参数验证器( `https://github.com/go-playground/validator` )主要语法进行介绍,方便本项目骨架使用者快速上手.
> 2.更详细的语法参与参见官方文档:`https://godoc.org/github.com/go-playground/validator`
#### 1.我们以用户注册代码块为例进行介绍.
> 1.[用户注册代码详情](../app/http/validator/web/users/register.go), 摘取表单参数验证部分.
> 2.以下语法虽然看似简单,实际上已经覆盖了绝大部分常用场景的需求.
```code
// 给出一些最常用的验证规则:
//required 必填;
//len=11 长度=11
//min=3 如果是数字验证的是数据大小范围最小值为3如果是文本验证的是最小长度为3
//max=6 如果是数字验证的是数字最大值为6如果是文本验证的是最大长度为6
//mail 验证邮箱
//gt=3 对于文本就是长度>=3
//lt=6 对于文本就是长度<=6
type Register struct {
// 必填、文本类型,表示它的长度>=1
UserName string `form:"user_name" json:"user_name" binding:"required,min=1"`
//必填密码长度范围【6,20】闭区间
Pass string `form:"pass" json:"pass" binding:"required,min=6,max=20"`
// 验证码必填长度等于4
//Captcha string `form:"captcha" json:"captcha" binding:"required,len=4"`
// 年龄必填数字类型大小范围【1,200】闭区间
//Age float64 `form:"age" json:"age" binding:"required,min=1,max=200"`
// 状态必填数字类型大小范围【0,1】 闭区间
// 注意: 如果你的表单参数含有0值是允许提交的必须用指针类型*float64而 float64 类型则认为 0 值不合格
Status *float64 `form:"status" json:"status" binding:"required,min=0,max=1"`
}
// 注意:这里的接收器 r必须是 r Register, 绝对不能是 r *Register
// 因为在 ginskeleton 里面表单参数验证器是注册在容器的代码段,
// 如果是指针,带参数的接口请求,就会把容器的原始代码污染。
func (r Register) CheckParams(context *gin.Context) {
// context.ShouldBind(&r) 则自动绑定 form-data 提交的表单参数
if err := context.ShouldBind(&r); err != nil {
// 省略非验证器逻辑代码....
// ... ...
}
// 如果您的客户端的数据是以json格式提交popstman中的raw格式那么就用如下语法
// context.ShouldBindJson(&r) 则自动绑定 json格式提交的参数
}
```
#### 2.以上语法特别说明.
> 1.对于数字类型int8、int、int64、float32、float64等我们统一使用 float64、*float64 接受.
> 2.如果您的业务要求数字格式为 int类型那么使用 int() 等数据类型转换函数自行转换即可.