package main import ( "fmt" "github.com/gin-gonic/gin" "log" "net/http" ) func middleware1() gin.HandlerFunc{ return func (c *gin.Context){ log.Print("middleware1-1") c.Next() log.Print("middleware1-2") } } func middleware2() gin.HandlerFunc{ return func (c *gin.Context){ log.Print("middleware2-1") c.Next() log.Print("middleware2-2") } } func get(c *gin.Context){ fmt.Println("handel func") c.JSON(http.StatusOK,gin.H{"name":"zh"}) } func main(){ router:=gin.New() router.Use(middleware1()) router.Use(middleware2()) router.GET("/v1",get) router.Run("127.0.0.1:8888") }
//输出 2019/07/15 17:19:50 middleware1-1 2019/07/15 17:19:50 middleware2-1 handel func 2019/07/15 17:19:50 middleware2-2 2019/07/15 17:19:50 middleware1-2
执行顺序是:middleware1 执行到c.next() 然后调转到下一个middleware2,middleware2执行到c.next(),跳转到路由对应的函数get(),该函数执行完之后,回到middleware2剩下没执行的代码,middleware2执行完之后,就到了middleware1执行它自己剩下没执行的代码。
原文:https://www.cnblogs.com/zhao1070285683/p/11190270.html