为了能够更方便的获取请求相关参数,提高开发效率,gin框架提供了Bind系列方法。
分类
Bind系列方法大致分两类:
- Should类型
- Must类型
二者的区别就是:should和must的区别,即must绑定失败会报错
关系图
Should类型

Must类型

ShouldBindBodyWith

 假设有这样的场景:
- 请求体中的数据分为:校验用数据和接口用数据
- 校验用数据绑定给auth中间件的结构体,api用数据绑定为api结构体
- 一个请求上下分则需要绑定两次,但request.Body只可读取一次
此时,shouldBindBodyWith就应用而生:
- ShouldBindBodyWith is similar with ShouldBindWith, but it stores the request
 body into the context, and reuse when it is called again.
- 将request.body再次存储在上下文中
- 后续调用都得使用该方法
校验器
- gin框架使用github.com/go-playground/validator进行参数校验。
- 文档:validator
- github:validator
简单示例
type SignUpParam struct {
	Age        uint8  `json:"age" binding:"gte=1,lte=130"`
	Name       string `json:"name" binding:"required"`
	Email      string `json:"email" binding:"required,email"`
	Password   string `json:"password" binding:"required"`
	RePassword string `json:"re_password" binding:"required,eqfield=Password"`
	Date       string `json:"date" binding:"required,datetime=2006-01-02`
}
此时,若gin的Bind方法会根据binding标签校验字段
自定义校验器
- 定义校验规则
func customFunc(fl validator.FieldLevel) bool {
	date, err := time.Parse("2006-01-02", fl.Field().String())
	if err != nil {
		return false
	}
	if date.Before(time.Now()) {
		return false
	}
	return true
}
- 注册到validator引擎中
func InitTrans(locale string) (err error) {
	// 修改gin框架中的Validator引擎属性,实现自定制
	if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
    	// 在校验器注册自定义的校验方法(名字,校验钩子)
		if err := v.RegisterValidation("checkDate", customFunc); err != nil {
			return err
		}
}













![[附源码]计算机毕业设计JAVA红河旅游信息服务系统](https://img-blog.csdnimg.cn/90664ff0b2e8477e8844da0add9b07bd.png)



![[附源码]SSM计算机毕业设计在线购物系统JAVA](https://img-blog.csdnimg.cn/2979127dc3ac4c0d899ccb98fc90f04c.png)

