中间件其实是一个方法,
在.use就可以调用中间件函数
r := gin.Default()v1 := r.Group("v1")//v1 := r.Group("v1").Use()v1.GET("test", func(c *gin.Context) {fmt.Println("get into the test")c.JSON(200, gin.H{"success": true, //返回一对键值对})})r.Run(":8080")
}
之后我们再来看Use方法,用来使用中间件
// Use adds middleware to the group, see example code in GitHub.
func (group *RouterGroup) Use(middleware ...HandlerFunc) IRoutes {group.Handlers = append(group.Handlers, middleware...)return group.returnObj()
}type HandlerFunc func(*Context)//HandlerFunc就是一个接受了参数为*Context的函数
//在实际过程中是我们返回一个函数作为结果
说一下中间件的顺序
和洋葱中间件是差不多的
func middle() gin.HandlerFunc {return func(c *gin.Context) {fmt.Println("我在方法前,1")c.Next()fmt.Println("我在方法后,1")}
}func middleTwo() gin.HandlerFunc {return func(c *gin.Context) {fmt.Println("我在方法前,2")c.Next()fmt.Println("我在方法后,2")}
}
func main() {r := gin.Default()v1 := r.Group("v1").Use(middle(), middleTwo())/*首先执行middle()c.Next()执行middleTwo()在middleTwo内部也有c.Next()这个时候发现没有了往下面执行,这个就是core执行完之后执行middleTwo()然后再执行middle()*/v1.GET("test", func(c *gin.Context) {fmt.Println("我在分组方法内部")c.JSON(200, gin.H{"success": true, //返回一对键值对})})r.Run(":8080")
}
中间件还有一种调用方式,链式调用方式
v1 := r.Group("v1").Use(middle(),middleTwo())
效果是一样的