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上运行
}