0
点赞
收藏
分享

微信扫一扫

在gin的中间件中如何终止后续逻辑代码的执行?

兽怪海北 2022-04-29 阅读 58
golang

gin中间件中使用return方式是无法终止后续代码的执行的。

需要通过c.Abort()方法进行终止。

...
func CheckToken() gin.HandlerFunc {
	return func(c *gin.Context) {
		...
        ...
        //return
		c.Abort()
		c.Next()
	}
}
func main() {
	router := gin.New()
	router.Use(CheckToken(), gin.Recovery(), gin.Logger())
	router.GET("/login", LoginFunc)
	router.Run(":8081")
}

个人笔记:

​ 1. 为什么return阻止不了后续的逻辑运行?

​ 2. **c.Next()**如何开启下一个执行代码?

​ 3. c.Abort()如何终止后续代码?

router.Use()会把相关的中间件函数名(CheckToken(), gin.Recovery(), gin.Logger())依次appendgroup.Handlers切片后边,后面的router.GET()也会把LoginFunc这个业务函数appendgroup.Handlers后面,先放入的会先开始运行。当我们在CheckToken()这个中间件中使用return时,它只会结束这个中间件的函数,不会影响到group.Handlers切片中函数的索引值Indexgin驱动会根据Index继续执行group.Handlers中的下一个函数(索引为Index+1)。

​ 中间件函数中的c.Next()方法会让待执行的函数开始执行的实现方式为:c.Next()会执行Index++,当Index值还在group.Handlers的长度内,gin驱动便调用group.Handlers中的索引为Index的待执行的函数。

c.Abort()终止后续逻辑代码的实现方式为:对Index赋值为一个过大的数,使之超过group.Handlers的长度,使gin驱动无法调用到。

举报

相关推荐

0 条评论