1. Задача: Реализовать потокобезопасный in-memory rate limiter по алгоритму Sliding Window или Token Bucket
type RateLimiter interface {
Allow(key string) bool
}
NewRateLimiter(limit int, window time.Duration)Ответ
type bucket struct {
requests []time.Time
mu sync.Mutex
}
type slidingWindow struct {
limit int
window time.Duration
mu sync.RWMutex
buckets map[string]*bucket
}
func NewRateLimiter(limit int, window time.Duration) (RateLimiter, error) {
if limit < 0 {
return nil, fmt.Errorf("Limit must be >0")
}
return &slidingWindow{
limit : limit,
window : window,
buckets :…