为了能够更方便的获取请求相关参数,提高开发效率,gin框架提供了Bind系列方法。

分类

Bind系列方法大致分两类:

  1. Should类型
  2. Must类型

二者的区别就是:should和must的区别,即must绑定失败会报错

关系图

Should类型

Must类型

ShouldBindBodyWith


假设有这样的场景:

  1. 请求体中的数据分为:校验用数据和接口用数据
  2. 校验用数据绑定给auth中间件的结构体,api用数据绑定为api结构体
  3. 一个请求上下分则需要绑定两次,但request.Body只可读取一次

此时,shouldBindBodyWith就应用而生:

  1. ShouldBindBodyWith is similar with ShouldBindWith, but it stores the request
    body into the context, and reuse when it is called again.
  2. 将request.body再次存储在上下文中
  3. 后续调用都得使用该方法

校验器

  1. gin框架使用github.com/go-playground/validator进行参数校验。
  2. 文档:validator
  3. 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标签校验字段

自定义校验器

  1. 定义校验规则
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
}
  1. 注册到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}
}

gin binding方法汇总相关推荐

  1. WebService 远程调用方法汇总

    WebService 远程调用方法汇总 一.Web Service 二.REST 三.RPC 一.Web Service webservice 即web服务,它是一种跨编程语言和跨操作系统平台的远程调 ...

  2. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  3. 二、深度学习数据增强方法汇总

    深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...

  4. 特征点匹配+特征检测方法汇总

    特征点匹配+特征检测方法汇总 特征提取与匹配---SURF:SIFT:ORB:FAST:Harris角点 匹配方法 匹配函数 1. OpenCV提供了两种Matching方式: • Brute-for ...

  5. 统计计量 | 统计学中常用的数据分析方法汇总

    来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...

  6. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  7. IE问题解决方法汇总

    1.发送错误报告 [故障现象]在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭--"的信息提示.此时,如果单击"发 ...

  8. winform打开cad图纸_CAD打开图纸的方法汇总

    打开文件属于最基本的操作,大家都会,但每个人的习惯不一样,采用的方法也不完全相同,这里简单地将打开文件的各种方法汇总一下. 一.打开(OPEN)命令 这是最基本也是最常用的方法,但调用方法有很多种,可 ...

  9. js解决异步的方法汇总

    js解决异步的方法汇总 参考文章: (1)js解决异步的方法汇总 (2)https://www.cnblogs.com/yunshangwuyou/p/9631914.html 备忘一下.

  10. ES shard unassigned的解决方法汇总

    ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...

最新文章

  1. 读硕/博期间你积累了哪些重要的科研经验?
  2. 如何使用gensim来加载和使用词向量模型word2vec
  3. gitlab 删除分支_如何删除gitlab上默认受保护的master主分支
  4. 乐高创意机器人moc_LEGO乐高MOC作品欣赏:超有爱机器人偶E-MOTE
  5. 【Python】32 个常用入门 Python 实现
  6. Ubuntu18.04 替换vscode字体
  7. STM32F401CCU6踩坑系列
  8. 组态王 6.55 启停plc_成套设备PLC编程深圳PLC编程
  9. 加密html文件如何转换为pdf,PPT转成PDF后如何加密?其实真的很简单!
  10. 炼成的:精妙SQL语句介绍
  11. 华为Android10版怎么截屏,华为畅享10e怎么截屏?畅享10e多种屏幕截图方法
  12. 微信小程序项目启动错误“Error: ENOENT: no such file or directory, open”
  13. 如何解决飞思卡尔芯片使用监控程序产生的冲突问题
  14. 【节能、绿色、高效】数据中心发展正迈入“高算力”时代
  15. WPS pdf文档合并收费?Linux平台采用pdfunite实现pdf文档合并
  16. 【Blender】基础物体建模(2)
  17. Latex如何插入图片
  18. linux shell 命令之 uname
  19. 无人驾驶 | 自动驾驶技术和机器人技术的对比
  20. c语言字符串switch用法,C语言switch 语句的用法详解

热门文章

  1. 编程经验:关于如何在自己的网站或博客添加CNZZ站长统计功能
  2. 小程序获取带有分享者信息的小程序码
  3. 2013年系统架构师考试题详解
  4. SpringBoot自定义starter
  5. 盗版xp成功验证成正版,享受正版增值服务!
  6. html5抠图,抠图放大招,5分钟解决白底图难题!
  7. Java的Abstraction抽象类/方法-笔记
  8. 知识星球<我们谈论数据科学>-python30天打卡训练营Day1
  9. 数字电视 星座图 matlab,数字电视 MER 及星座图剖析
  10. Linux系统进程优化理论与方法