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

Java转Go日记(五十七):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()
}

输出结果:

 注意: 请注意黑色的数据里面有一步算时间差没有执行(需要学习Next就懂了)

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)
}

 效果演示:

http://www.lqws.cn/news/116713.html

相关文章:

  • 一台电脑联网如何共享另一台电脑?网线方式
  • OpenCV CUDA模块图像处理------创建CUDA加速的Canny边缘检测器对象createCannyEdgeDetector()
  • [蓝桥杯]三元组中心问题
  • 将音频数据累积到缓冲区,达到阈值时触发处理
  • Python爬虫(48)基于Scrapy-Redis与深度强化学习的智能分布式爬虫架构设计与实践
  • 四、Sqoop 导入表数据子集
  • 什么是内网映射?如何将内网ip映射到外网访问?
  • 数据结构 [一] 基本概念
  • 力扣热题100之二叉树的直径
  • 【设计模式-4.9】行为型——命令模式
  • 学习STC51单片机27(芯片为STC89C52RCRC)
  • 3D视觉重构工业智造:解码迁移科技如何用“硬核之眼“重塑生产节拍
  • 海康网络摄像头实时取帧转Opencv数组格式(h,w,3),已实现python、C#
  • OPENCV重点结构体Mat的讲解
  • Cocos creator游戏开发面试题
  • CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
  • Kafka入门-集群基础环境搭建(JDK/Hadoop 部署 + 虚拟机配置 + SSH 免密+Kafka安装启动)
  • 解决IDE编译JAVA项目时出现的OOM异常问题
  • 分类与逻辑回归 - 一个完整的guide
  • springboot ErrorController getErrorPath() 版本变迁
  • Springfox 和 Knife4j 集成404 问题
  • 期末复习(学习)之机器学习入门基础
  • 705SJBH超市库存管理系统文献综述
  • Oracle OCP与MySQL OCP认证如何选?
  • SpringBoot(七) --- Redis基础
  • Ubuntu 25.10 将默认使用 sudo-rs
  • web全栈开发学习-01html基础
  • PyTorch学习笔记 - 损失函数
  • C++ 使用 ffmpeg 解码本地视频并获取每帧的YUV数据
  • 大数据学习(128)-数据分析实例