gin中ctx.Next()的作用


官方示例代码

func Logger() gin.HandlerFunc {
	return func(c *gin.Context) {
		t := time.Now()

		// Set example variable
		c.Set("example", "12345")

		// before request

		c.Next()

		// after request
		latency := time.Since(t)
		log.Print(latency)

		// access the status we are sending
		status := c.Writer.Status()
		log.Println(status)
	}
}
func main() {
	r := gin.New()
	r.Use(Logger())

	r.GET("/test", func(c *gin.Context) {
		example := c.MustGet("example").(string)

		// it would print: "12345"
		log.Println(example)
	})

	// Listen and serve on 0.0.0.0:8080
	r.Run(":8080")
}

示例解析

在官方代码中,向路由加入了一个中间件Logger,该中间件起到计算请求处理所用时间的作用

Next()的功能

Next()只能在中间件中使用,会挂起当前中间件(也就是Next()后面的代码先不执行),开始执行后面的中间件和最后的handler。
后续的中间件和最后的handler执行完毕后,再回到调用Next()的中间件,继续执行Next()之后的代码。