使用中间件统计 gin 响应结果


Demo

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
    "sync/atomic"
)

var (
    // 使用原子操作保证并发安全
    successCount uint64
)

// 中间件函数
func countSuccessResponses() gin.HandlerFunc {
    return func(c *gin.Context) {
        // 在请求被处理之前,先调用下一个中间件或者最终的handler
        c.Next()

        // 检查响应状态码
        if c.Writer.Status() == http.StatusOK {
            // 增加计数,使用原子操作保证并发安全
            atomic.AddUint64(&successCount, 1)
        }
    }
}

func main() {
    r := gin.Default()

    // 应用中间件
    r.Use(countSuccessResponses())

    // 设置一个示例路由
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "pong",
        })
    })

    // 运行服务
    r.Run() // 默认在localhost:8080上运行
}

如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


文章作者: Anubis
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Anubis !
评论
 上一篇
经典的 Go 多线程编程题总结 经典的 Go 多线程编程题总结
本文通过具体的Go语言代码示例,详细介绍了实现线程同步和并发数据同步的多种方法。从基本的线程顺序控制到复杂的生产者消费者模型,这些示例覆盖了并发编程中的常见需求。通过通道、WaitGroup、Mutex、Atomic和条件变量等同步原语。
2024-02-12
下一篇 
  目录