当前位置: 首页 > news >正文

gin中间件篇

1. 全局中间件

  • 所有请求都经过此中间件
package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()fmt.Println("中间件开始执行了")// 设置变量到Context的key中,可以通过Get()取c.Set("request", "中间件")status := c.Writer.Status()fmt.Println("中间件执行完毕", status)t2 := time.Since(t)fmt.Println("time:", t2)}
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 注册中间件r.Use(MiddleWare())// {}为了代码规范{r.GET("/ce", func(c *gin.Context) {// 取值req, _ := c.Get("request")fmt.Println("request:", req)// 页面接收c.JSON(200, gin.H{"request": req})})}r.Run()
}

输出结果:

 

2. Next()方法

package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()fmt.Println("中间件开始执行了")// 设置变量到Context的key中,可以通过Get()取c.Set("request", "中间件")// 执行函数c.Next()// 中间件执行完后续的一些事情status := c.Writer.Status()fmt.Println("中间件执行完毕", status)t2 := time.Since(t)fmt.Println("time:", t2)}
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 注册中间件r.Use(MiddleWare())// {}为了代码规范{r.GET("/ce", func(c *gin.Context) {// 取值req, _ := c.Get("request")fmt.Println("request:", req)// 页面接收c.JSON(200, gin.H{"request": req})})}r.Run()
}

输出结果:

 

3. 局部中间件

package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()fmt.Println("中间件开始执行了")// 设置变量到Context的key中,可以通过Get()取c.Set("request", "中间件")// 执行函数c.Next()// 中间件执行完后续的一些事情status := c.Writer.Status()fmt.Println("中间件执行完毕", status)t2 := time.Since(t)fmt.Println("time:", t2)}
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()//局部中间键使用r.GET("/ce", MiddleWare(), func(c *gin.Context) {// 取值req, _ := c.Get("request")fmt.Println("request:", req)// 页面接收c.JSON(200, gin.H{"request": req})})r.Run()
}

效果演示:

4. 中间件练习

  • 定义程序计时中间件,然后定义2个路由,执行函数后应该打印统计的执行时间,如下:
package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func myTime(c *gin.Context) {start := time.Now()c.Next()// 统计时间since := time.Since(start)fmt.Println("程序用时:", since)
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 注册中间件r.Use(myTime)// {}为了代码规范shoppingGroup := r.Group("/shopping"){shoppingGroup.GET("/index", shopIndexHandler)shoppingGroup.GET("/home", shopHomeHandler)}r.Run(":8000")
}func shopIndexHandler(c *gin.Context) {time.Sleep(5 * time.Second)
}func shopHomeHandler(c *gin.Context) {time.Sleep(3 * time.Second)
}

效果演示:

 

相关文章:

  • SAP ABAP SUBMIT常用用法
  • Spring Boot 4.0:构建云原生Java应用的前沿工具
  • 爬虫模板(附完整代码+案例)
  • 常用的Qt开源库分享
  • 一、基础数据结构——2.队列——3.双端队列和单调队列1
  • 【Ant Design of Vue】Modal.confirm无法关闭的bug
  • 如何在Linux部署JumpServer堡垒机并实现远程访问本地服务
  • mybatis的缓存机制
  • vue中合并下载打包视频图片
  • Gitee Reward让开源作者不再为爱发电
  • 数组练习 Leetcode 566.重塑矩阵
  • Pytest插件pytest-django让Django测试更高效
  • Spring data都包含哪些内容
  • 100天精通Python(实用脚本篇)——第113天:基于Tesseract-OCR实现OCR图片文字识别实战
  • 蓝桥杯官网填空题(海盗与金币)
  • 分享的文章《人生如棋》
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • django开发-定时任务的使用
  • ES6系统学习----从Apollo Client看解构赋值
  • ES6之路之模块详解
  • js对象的深浅拷贝
  • js写一个简单的选项卡
  • magento2项目上线注意事项
  • Python 反序列化安全问题(二)
  • STAR法则
  • Terraform入门 - 1. 安装Terraform
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Zepto.js源码学习之二
  • 彻底搞懂浏览器Event-loop
  • 从输入URL到页面加载发生了什么
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 通过几道题目学习二叉搜索树
  • 源码安装memcached和php memcache扩展
  • 怎么把视频里的音乐提取出来
  • 智能网联汽车信息安全
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ###C语言程序设计-----C语言学习(6)#
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (C++)八皇后问题
  • (C语言)球球大作战
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 常见的偏门问题
  • .NET 使用 XPath 来读写 XML 文件
  • .net 受管制代码
  • .Net多线程总结
  • ??myeclipse+tomcat