下面是自定义中间件的例子
// 自定义中间件,用于记录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",
    })
})