Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 70.4MB ·虚拟内存 1303.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
gin 框架中间件处理有两个重要的函数 Next() 和 Abort()。
Next 函数会挂起当前所在的函数,然后调用后面的中间件,待后面中间件执行完毕后,再接着执行当前函数。
gin 中间件 Next() 使用方法如下:
func (c *Context)Next()
比如:
func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { c.Next() } }
我们的案例中共有三个中间件,其中在中间件1中,调用了 Next 函数。
package main import ( "fmt" "github.com/gin-gonic/gin" ) // 定义中间件1 func MiddleWare1() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件1") // 调用 Next,开始执行后续的中间件 c.Next() fmt.Println("中间件继续执行") } } // 定义中间件2 func MiddleWare2() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件2") } } // 定义中间件3 func MiddleWare3() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件3") } } func main() { // 创建路由 engine := gin.Default() // 注册中间件 engine.Use(MiddleWare1(), MiddleWare2(), MiddleWare3()) // 路由规则 engine.GET("/", func(c *gin.Context) { fmt.Println("调用路由处理函数") // 页面接收 c.JSON(200, gin.H{"request": "编程教程 gin框架"}) }) engine.Run() }
运行程序,并在浏览器输入:http://localhost:8080,控制台日志会输出:
[GIN-debug] GET / --> main.main.func1 (4 handlers) [GIN-debug] Listening and serving HTTP on :8080 调用中间件1 调用中间件2 调用中间件3 调用路由处理函数 中间件继续执行 [GIN] 2021/05/31 - 12:03:13 | 200 | 193.22µs | ::1 | GET "/"
以上输出显示:中间件1执行 Next 后,开始执行其他中间件,再执行页面处理函数。它们执行完毕后,又开始执行自己后续的代码。