使用中间件统计 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)


评论
  目录