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

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

阅读 5.6k
评论
    9 个回答
    package main
    
    import (
        "fmt"
    
        "github.com/gin-gonic/gin"
    )
    
    func main() {
        r := gin.Default()
        r.GET("/ping", Ping)
        r.Use(PrintRequest)
        r.Use(PrintResponse)
        // add your handlers here
        r.Run()
    }
    
    func PrintRequest(c *gin.Context) {
        fmt.Println("this is request")
    }
    
    func PrintResponse(c *gin.Context) {
        now := time.Now()
        // 先执行handler下面中间件和handler
        c.Next()
        fmt.Printf("this is response, cost: %d",
            time.Since(now).Nanoseconds())
    }

    我们以上面的代码为例,加入了两个中间件 PrintRequest PrintResponse

    • PrintRequest: 正常打印就ok了,不需要依赖下面的中间件,也没有什么需要特出处理的,加入到中间件后,正常执行即可
    • PrintResponse: 这个就不一样了,我想要计算这个请求到底花费了多久,就需要先执行下面的中间件和handler,等他们都完成后,再回到 PrintResponse 这个中间件里,进行计时就ok了。 当你打印返回的response body的时候,也是一样的道理,中间件都会比handler先执行,但是没有handler,中间件怎么拿到 response body,这时候就要用到 c.Next() 先去 执行 余下的中间件和 handler,然后再回到我这个中间件里面

    c.Next 的主要作用大概就是这样了

      相似问题
      推荐文章