day4|gin的中间件和路由分组

中间件其实是一个方法,

在.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())

效果是一样的

相关推荐
ArixBit1 天前
用 Go 手撸 Agent 框架 #11:工具从哪里来——内置工具、MCP 与 Skills
go·agent
程序员爱钓鱼1 天前
为什么学习 Go?Go 能做什么?
后端·面试·go
用户095367515832 天前
在系统的学习 redis 前的疑惑
redis·go
名字还没想好☜2 天前
Go 用 errgroup 管理并发子任务:错误收敛、取消传播与限流
开发语言·后端·golang·go·并发
labixiong2 天前
TypeScript 7.0 编译器用 Go 重写,速度暴增10倍——背后到底做了什么?
前端·javascript·go
名字还没想好☜3 天前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
ArixBit3 天前
用 Go 手撸 Agent 框架 #10:用自己的 Runtime,做一个研究助手
go·agent
cocoCola916674 天前
validator库参数校验若干实用技巧
go
不会C语言的男孩4 天前
第三章:流程控制
go
名字还没想好☜4 天前
Go 的 sync.Pool 实战:复用对象把 GC 压力打下来
开发语言·后端·性能优化·golang·go