goalng框架Gin中间件的c.Next()有什么作用?

感觉用不用效果一样的啊,看文档说是执行挂起程序,具体怎么好理解一些呢,每个中间件一定要用吗?

阅读 5.6k
评论
    9 个回答
    • 2
    • 新人请关照

    理解是加上c.Next()后马上开始执行下一个中间件,同时也执行c.Next()后的代码。不加上c.Next()则要等自身的handler执行完成才开始下一个中间件。下面是对比代码输出:

    func testCNext() {
        r := gin.New()
    
        mid1 := func(c *gin.Context) {
            start := time.Now()
            fmt.Println("middleware1 start")
            // 注释 or 不注释
            c.Next() 
            fmt.Println(time.Since(start))
            fmt.Println("middleware1 ending")
        }
    
        mid2 := func(c *gin.Context) {
            fmt.Println("middleware2 start")
            c.Next()
            fmt.Println("middleware2 ending")
        }
    
        r.Use(mid1, mid2)
        r.GET("/", func(c *gin.Context) {
            c.JSON(http.StatusOK, "hi")
        })
        r.Run()
    }
    
    不注释mid1中的c.Next()输出
    middleware1 start
    middleware2 start
    middleware2 ending
    175.819µs
    middleware1 ending
    
    注释mid1中的c.Next()输出
    middleware1 start
    13.139µs
    middleware1 ending
    middleware2 start
    middleware2 ending
      相似问题
      推荐文章