1.go可以构建中哈进件,但它只对注册过的路由函数起作用
2.对于分组路由,嵌套使用中间件,可以限定中间件的作用范围
3.中间件分为全局中间件,单个路由中间件和群组中间件
4.gin中间件必须是一个gin.HandlerFunc 类型

示例(全局、单个路由,组路由)

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "time"
  6. )
  7. //全局中间件
  8. func middleFunc(c *gin.Context) {
  9. t := time.Now()
  10. fmt.Println("中间件开始")
  11. //设置值
  12. c.Set("request", "middle")
  13. //指定函数,如果不写,默认最后执行函数
  14. c.Next()
  15. // 中间件执行完后续的一些事情
  16. status := c.Writer.Status()
  17. fmt.Println("中间件结束", status)
  18. t2 := time.Since(t)
  19. fmt.Println("time", t2)
  20. }
  21. func main() {
  22. r := gin.Default()
  23. r.Use(middleFunc)
  24. r.GET("/middle", func(context *gin.Context) {
  25. req, _ := context.Get("request")
  26. fmt.Println("哈哈哈")
  27. context.JSON(200, req)
  28. })
  29. //单个路由中间件使用
  30. r.GET("/middle2", middleFunc, func(context *gin.Context) {
  31. req, _ := context.Get("request")
  32. fmt.Println("哈哈哈")
  33. context.JSON(200, req)
  34. })
  35. //组中间件使用
  36. v2:=r.Group("/v2",middleFunc)
  37. {
  38. v2.GET("/middle", func(context *gin.Context) {
  39. req, _ := context.Get("request")
  40. fmt.Println("哈哈哈")
  41. context.JSON(200, req)
  42. })
  43. }
  44. r.Run(":8080")
  45. }