中间件其实是一个方法,
在.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())
效果是一样的