https://www.cnblogs.com/chaselogs/p/9399526.html

    1. // 中间件
    2. func middleware() gin.HandlerFunc {
    3. return func(c *gin.Context) {
    4. t := time.Now()
    5. c.Set("example", "123456")
    6. // c.Next()后就执行真实的路由函数,路由执行完成之后接着走time.Since(t)
    7. c.Next()
    8. // 从time.Now()到目前为止过了多长时间
    9. latency := time.Since(t)
    10. log.Print("--", latency)
    11. // gin设置响应头,设置跨域
    12. c.Header("Access-Control-Allow-Origin", "*")
    13. c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
    14. c.Header("Access-Control-Allow-Headers", "Action, Module, X-PINGOTHER, Content-Type, Content-Disposition")
    15. //设置中间件的响应头,路由的响应头可以在路由返回中设置,参考/ping
    16. // c.Writer.WriteHeader(http.StatusMovedPermanently)
    17. status := c.Writer.Status()
    18. log.Println("==", status)
    19. }
    20. }
    21. func middle(c *gin.Context) {
    22. example := c.MustGet("example").(string)
    23. log.Println(example)
    24. }
    25. func main() {
    26. r := gin.Default()
    27. //中间件,只有在中间件之后注册的路由才会走中间件
    28. r.Use(middleware())
    29. //http://localhost:8081/middle
    30. r.GET("/middle", middle)
    31. r.Run(":8081")
    32. }