一架梯子,一头程序猿,仰望星空!
Golang GIN框架面试题 > 内容正文

Gin 框架中的中间件是什么?有没有通过自定义中间做过一些业务处理?


问题简答

Gin 框架中,中间件是一种可以包装路由处理函数的函数,它可以拦截http请求,用于处理请求和响应,例如验证身份、记录日志、限流等。在 Gin 中,中间件可以使用 Use() 方法注册到路由组或路由上,它们会按照注册顺序依次执行。

问题详解:

下面是自定义中间件的例子

// 自定义中间件,用于记录http访问日志
func logger() gin.HandlerFunc {
    return func(c *gin.Context) {
        start := time.Now()

        // 记录请求前日志
        path := c.Request.URL.Path
        query := c.Request.URL.RawQuery
        log.Printf("Started %s %s", path, query)

        // 继续处理请求
        c.Next()

        // 记录请求后日志
        latency := time.Since(start)
        log.Printf("Completed %s %v", path, latency)
    }
}

r := gin.Default()
// 注册中间件
r.Use(logger())

// 测试API
r.GET("/ping", func(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "pong",
    })
})