GIN中间件

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


什么是中间件?

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

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

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

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

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

自定义中间件

定义中间件:

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

中间件的使用:

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

Go 复制代码
router.Use(myHandler())

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

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

为路由组注册中间件

Go 复制代码
func Group(router *gin.Engine) {

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

相关推荐
Lee川23 分钟前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
星浩AI2 小时前
OpenHuman 对比 OpenClaw、Hermes Agent
人工智能·后端·agent
小江的记录本2 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
geovindu5 小时前
go: Semaphore Pattern
开发语言·后端·设计模式·golang·企业级信号量模式
IT_陈寒5 小时前
Redis内存用爆了,原来我们都忽略了这个配置
前端·人工智能·后端
武子康5 小时前
Java-02 深入浅出MyBatis 3 快速入门:环境配置、项目创建与 CRUD 操作
java·后端
未若君雅裁6 小时前
Spring Boot 自动配置原理与常用注解
java·spring boot·后端
Xiacqi16 小时前
Java数据库连接--JDBC--DRUID
数据库·后端
浮游本尊6 小时前
用结构化 Prompt 让大模型「干活」:以数据库巡检告警建议生成为例
后端
snakeshe10106 小时前
SpringBoot 多人协作平台实战(8):Cookie 与登录状态维持
后端