Go语言API限流:保护后端服务
2026/5/14 0:35:36 网站建设 项目流程

Go语言API限流:保护后端服务

1. 限流策略

API限流防止滥用和过载,保护后端服务的稳定性。

2. 限流实现

package ratelimit import ( "net/http" "sync" "time" "github.com/gin-gonic/gin" ) type RateLimiter struct { requests map[string][]time.Time mu sync.RWMutex limit int window time.Duration } func NewRateLimiter(limit int, window time.Duration) *RateLimiter { return &RateLimiter{ requests: make(map[string][]time.Time), limit: limit, window: window, } } func (rl *RateLimiter) Allow(ip string) bool { rl.mu.Lock() defer rl.mu.Unlock() now := time.Now() windowStart := now.Add(-rl.window) times := rl.requests[ip] validTimes := make([]time.Time, 0) for _, t := range times { if t.After(windowStart) { validTimes = append(validTimes, t) } } if len(validTimes) >= rl.limit { rl.requests[ip] = validTimes return false } rl.requests[ip] = append(validTimes, now) return true } func (rl *RateLimiter) Middleware() gin.HandlerFunc { return func(c *gin.Context) { ip := c.ClientIP() if !rl.Allow(ip) { c.JSON(http.StatusTooManyRequests, gin.H{"error": "rate limit exceeded"}) c.Abort() return } c.Next() } }

3. 总结

API限流是保护后端服务的重要手段,应根据服务能力设置合理的限流阈值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询