GIN中间件

ops/2024/12/24 20:06:23/

        感觉中间件是gin中挺重要的内容,就拿出来单独讲讲吧!


什么是中间件?

Gin框架允许开发者在处理请求的过程中,加入用户自己的 HandlerFunc 函数。

它适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。

也就是我们这里说的中间件。

必须是一个gin.HandlerFunc类型,即func(* Context)类型。

// HandlerFunc defines the handler used by gin middleware as return value.
type HandlerFunc func(*Context)

自定义中间件

定义中间件:

func myHandler() gin.HandlerFunc {return func(c *gin.Context) {startTime := time.Now()c.Next()endTime := time.Now()duration := endTime.Sub(startTime)fmt.Println(duration)}
}

中间件的使用:

注册全局路由,所有的请求都会经过这里来处理,打印出访问时间。

router.Use(myHandler())

为某个路由单独注册中间件

	router.GET("/example", myHandler(), func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{})})

为路由组注册中间件

func Group(router *gin.Engine) {userGroup := router.Group("/user")userGroup.Use(MyHandler()){ //习惯性一对`{}`包裹同组的路由,这只是为了看着清晰,你用不用`{}`包裹功能上没什么区别userGroup.GET("/1", func(c *gin.Context) {}) //   /user/1userGroup.GET("/2", func(c *gin.Context) {}) //   /user/2userGroup.GET("/3", func(c *gin.Context) {}) //   /user/3}
}

中间件的使用顺序

在 Gin 中,中间件是按照注册的顺序依次执行的。如果中间件 A 注册在 B 之前,那么 A 会在 B 之前执行;调用c.next() 后,将执行下一个中间件,如果 c.Abort() 被调用,后续中间件将不会执行。

gin默认中间键

gin.Default()默认使用了LoggerRecovery中间件,其中:

  • Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release

  • Recovery中间件会recover任何panic。如果有panic的话,会写入500响应码。

如果不想使用上面两个默认的中间件,可以使用gin.New()新建一个没有任何默认中间件的路由。

 


        本来想着挺重要的,就单独写了,学了一遍之后发现很简单,可能是因为我之前学过吧,之前那遍挺蒙的,就觉得难了,回头再看其实不难。 这篇文章比我写的好写的全,十分推荐:【Golang】——Gin 框架中间件详解:从基础到实战_gin 中间件-CSDN博客


http://www.ppmy.cn/ops/144654.html

相关文章

深度学习之超分辨率算法——SRCNN

网络为基础卷积层 tensorflow 1.14 scipy 1.2.1 numpy 1.16 大概意思就是针对数据,我们先把图片按缩小因子照整数倍进行缩减为小图片,再针对小图片进行插值算法,获得还原后的低分辨率的图片作为标签。 main.py 配置文件 from model im…

网络协议与网络安全学习记录

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密 HTTPS,代表Hyper Text Transfer Protocol Secure,将SSL/T…

Java 集合框架中的 List、ArrayList 和 泛型 实例

— Java 集合框架中的 List、ArrayList 和 泛型 在 Java 中,集合框架提供了许多不同类型的集合类,用于存储和操作对象。List 和 ArrayList 是最常用的两种集合类型,而泛型(Generics)则是 Java 中的一项重要特性&…

两款轻量级数据库SQLite 和 TinyDB,简单!实用!

SQLite 和 TinyDB 技术文档 一、SQLite 1. 特性 轻量级:SQLite 是一个轻量级的嵌入式数据库,无需独立的服务器进程,可以直接集成到应用程序中。 跨平台:支持多种操作系统,包括 Windows、Linux、macOS 等。 关系型数…

Vue常用指令

1. 插值表达式 {{}} <script setup> let msg="hello vue!" </script> <template> <h1>{{ msg }}--{{ 1+1 }}--{{ msg+sb }}</h1> </template> 2. Vue 常用指令 (以v- 开头) 2.1 v-html 替换标签元素内容,包含标签…

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题 2024/9/21 10:40 缘起&#xff1a;常见的问题&#xff0c;你下载视频的时候&#xff0c;4K分辨率的视频播放的时候出现偏色异常&#xff0c;但是1080p分辨率的正常呀&#xff01; 偏色的识别&…

《VQ-VAE》:Stable Diffusion设计的架构源泉

文章目录 阅读本文你可以了解到1 VQ-VAE的核心思想1.1 为什么VQ-VAE想要把图像编码成离散向量&#xff1f;1.2 VQ-VAE引入codebook(即embedding space嵌入空间&#xff09;1.3 VQ-VAE的工作过程 2 VQ-VAE实现方法2.1 VQ-VAE的编码器怎么输出离散向量。2.2 VQ-VAE怎么优化编码器…

华为云计算HCIE笔记02

第二章&#xff1a;华为云Stack规划设计 交付总流程 准备工作&#xff1a;了解客户的基本现场&#xff0c;并且对客户的需求有基本的认知。 HLD方案BOQ报价设备采购和设备上架 2.安装部署流程 硬件架构设计 硬件设备选配 设备上架与初始化配置 准备相关资料&#xff08;自动下载…