介绍
本文主要介绍如何在gin框架中使用自定义的中间件,自出以为自定义logger为例子。
案例
源码:
package main
import (
"github.com/gin-gonic/gin"
"log"
"time"
)
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
t := time.Now()
// 设置 example 变量
c.Set("example", "12345")
// 请求前
c.Next()
// 请求后
latency := time.Since(t)
log.Printf("latency=%v\n", latency)
// 获取发送的 status
status := c.Writer.Status()
log.Printf("status=%v\n", status)
}
}
func main() {
r := gin.New()
r.Use(Logger())
r.GET("/test", func(c *gin.Context) {
example := c.MustGet("example").(string)
log.Println(example)
c.String(200, example)
})
r.Run(":8080")
}
此处在中间件中使用了 c.Next(), 因此先输出 12345; 若注释掉 c.Next(), 那么会在最好输出 12345;
测试:
http://127.0.0.1:8080/test
12345
终端输出:
[GIN-debug] Listening and serving HTTP on :8080
2022/03/29 23:59:50 12345
2022/03/29 23:59:50 latency=91.834µs
2022/03/29 23:59:50 status=200