gin binding方法汇总
为了能够更方便的获取请求相关参数,提高开发效率,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}
}
gin binding方法汇总相关推荐
- WebService 远程调用方法汇总
WebService 远程调用方法汇总 一.Web Service 二.REST 三.RPC 一.Web Service webservice 即web服务,它是一种跨编程语言和跨操作系统平台的远程调 ...
- 用python下载文件的若干种方法汇总
压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...
- 二、深度学习数据增强方法汇总
深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...
- 特征点匹配+特征检测方法汇总
特征点匹配+特征检测方法汇总 特征提取与匹配---SURF:SIFT:ORB:FAST:Harris角点 匹配方法 匹配函数 1. OpenCV提供了两种Matching方式: • Brute-for ...
- 统计计量 | 统计学中常用的数据分析方法汇总
来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...
- js如何操作表格(常用属性方法汇总)
js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...
- IE问题解决方法汇总
1.发送错误报告 [故障现象]在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭--"的信息提示.此时,如果单击"发 ...
- winform打开cad图纸_CAD打开图纸的方法汇总
打开文件属于最基本的操作,大家都会,但每个人的习惯不一样,采用的方法也不完全相同,这里简单地将打开文件的各种方法汇总一下. 一.打开(OPEN)命令 这是最基本也是最常用的方法,但调用方法有很多种,可 ...
- js解决异步的方法汇总
js解决异步的方法汇总 参考文章: (1)js解决异步的方法汇总 (2)https://www.cnblogs.com/yunshangwuyou/p/9631914.html 备忘一下.
- ES shard unassigned的解决方法汇总
ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...
最新文章
- 读硕/博期间你积累了哪些重要的科研经验?
- 如何使用gensim来加载和使用词向量模型word2vec
- gitlab 删除分支_如何删除gitlab上默认受保护的master主分支
- 乐高创意机器人moc_LEGO乐高MOC作品欣赏:超有爱机器人偶E-MOTE
- 【Python】32 个常用入门 Python 实现
- Ubuntu18.04 替换vscode字体
- STM32F401CCU6踩坑系列
- 组态王 6.55 启停plc_成套设备PLC编程深圳PLC编程
- 加密html文件如何转换为pdf,PPT转成PDF后如何加密?其实真的很简单!
- 炼成的:精妙SQL语句介绍
- 华为Android10版怎么截屏,华为畅享10e怎么截屏?畅享10e多种屏幕截图方法
- 微信小程序项目启动错误“Error: ENOENT: no such file or directory, open”
- 如何解决飞思卡尔芯片使用监控程序产生的冲突问题
- 【节能、绿色、高效】数据中心发展正迈入“高算力”时代
- WPS pdf文档合并收费?Linux平台采用pdfunite实现pdf文档合并
- 【Blender】基础物体建模(2)
- Latex如何插入图片
- linux shell 命令之 uname
- 无人驾驶 | 自动驾驶技术和机器人技术的对比
- c语言字符串switch用法,C语言switch 语句的用法详解