官方示例代码
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()之后的代码。