gin 中间件流程控制:Next()、 Abort()

Gin框架中,Next()用于在中间件内执行后续处理程序,允许控制流程继续;而Abort()则阻止调用后续处理程序,常用于授权失败等场景。当调用Abort()后,中间件链中的其他HandlerFunc将不再执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gin 中间件流程控制

Next()

源码注释:Next应该只在中间件内部使用。它执行调用处理程序内部链中的挂起处理程序。

通俗的说,就是中间件放行,当一个中间件代码执行到Next(),会先执行它之后的函数,最后再来执行完本函数。

eg:

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func m1(c *gin.Context) {
	fmt.Println("m1 in......")
	c.Next()
	fmt.Println("m1 out......")
}
func indexHandler(c *gin.Context) {
	fmt.Println("index....in")
	c.JSON(http.StatusOK, gin.H{"msg": "index"})
	c.Next()
	fmt.Println("index....out")
}
func m2(c *gin.Context) {
	fmt.Println("m2 in......")
	c.Next()
	fmt.Println("m2 out.....")
}
func main() {
	router := gin.Default()

	router.GET("/", m1, indexHandler, m2)

	router.Run(":8080")

}
//输出
	/*
	m1 in......
	index....in
	m2 in......
	m2 out.....
	index....out
	m1 out.....
	*/.

请添加图片描述
如果其中一个中间件响应了c.Abort(),后续中间件将不再执行,直接按照顺序走完所有的响应中间件

Abort

源码注释:Abort防止调用挂起的处理程序。注意,这不会停止当前处理程序。

假设您有一个授权中间件,用于验证当前请求是否已授权。

如果授权失败(例如:密码不匹配),调用Abort以确保不调用此请求的其余处理程序。

意思就是当程序执行到Abort()时,后续的 Handler Func就不会执行了

eg:

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func m1(c *gin.Context) {
	fmt.Println("m1 in......")
	c.JSON(http.StatusOK, gin.H{"msg": "第一个中间件拦截了"})
	c.Abort()
}
func indexHandler(c *gin.Context) {
	fmt.Println("index....")
	c.JSON(http.StatusOK, gin.H{"msg": "index"})
}
func m2(c *gin.Context) {
	fmt.Println("m2 in......")
}
func main() {
	router := gin.Default()

	router.GET("/", m1, indexHandler, m2)

	router.Run(":8080")

}

//输出
//m1 in......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值