一、全局中间件

  • 所有请求都经过此中间件 ```go package main

import ( “fmt” “time”

  1. "github.com/gin-gonic/gin"

)

// 定义中间 func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now() fmt.Println(“中间件开始执行了”) // 设置变量到Context的key中,可以通过Get()取 c.Set(“request”, “中间件”) status := c.Writer.Status() fmt.Println(“中间件执行完毕”, status) t2 := time.Since(t) fmt.Println(“time:”, t2) } }

func main() { // 1.创建路由 // 默认使用了2个中间件Logger(), Recovery() r := gin.Default() // 注册中间件 r.Use(MiddleWare()) // {}为了代码规范 { r.GET(“/ce”, func(c *gin.Context) { // 取值 req, _ := c.Get(“request”) fmt.Println(“request:”, req) // 页面接收 c.JSON(200, gin.H{“request”: req}) })

  1. }
  2. r.Run()

}

  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/21940000/1655194836878-b1591ef9-d5ff-4aaf-bea5-c3bee95fa66f.png#clientId=ud016ed0a-2570-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=180&id=u9a28ad68&margin=%5Bobject%20Object%5D&name=image.png&originHeight=180&originWidth=725&originalType=binary&ratio=1&rotation=0&showTitle=false&size=15166&status=done&style=none&taskId=ucf9cf320-8f12-4a0b-a527-ea749af77f4&title=&width=725)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/21940000/1655194892109-96276271-b936-4121-9fef-a3948c33a041.png#clientId=ud016ed0a-2570-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=161&id=u94c37ad9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=161&originWidth=333&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6083&status=done&style=none&taskId=u14eed38d-b8e0-4a93-b1ef-5c442b6963b&title=&width=333)
  2. <a name="hNVOD"></a>
  3. # 二、Next()方法
  4. ```go
  5. package main
  6. import (
  7. "fmt"
  8. "time"
  9. "github.com/gin-gonic/gin"
  10. )
  11. // 定义中间
  12. func MiddleWare() gin.HandlerFunc {
  13. return func(c *gin.Context) {
  14. t := time.Now()
  15. fmt.Println("中间件开始执行了")
  16. // 设置变量到Context的key中,可以通过Get()取
  17. c.Set("request", "中间件")
  18. // 执行函数
  19. c.Next()
  20. // 中间件执行完后续的一些事情
  21. status := c.Writer.Status()
  22. fmt.Println("中间件执行完毕", status)
  23. t2 := time.Since(t)
  24. fmt.Println("time:", t2)
  25. }
  26. }
  27. func main() {
  28. // 1.创建路由
  29. // 默认使用了2个中间件Logger(), Recovery()
  30. r := gin.Default()
  31. // 注册中间件
  32. r.Use(MiddleWare())
  33. // {}为了代码规范
  34. {
  35. r.GET("/ce", func(c *gin.Context) {
  36. // 取值
  37. req, _ := c.Get("request")
  38. fmt.Println("request:", req)
  39. // 页面接收
  40. c.JSON(200, gin.H{"request": req})
  41. })
  42. }
  43. r.Run()
  44. }