Как реализовать rate limiter через каналы?

Middle
288 просмотров
AFK Offer AI

Простейший — time.Tick: ticker := time.NewTicker(time.Second/ratePerSec). Перед каждой операцией <-ticker.C — блокируешься пока не придёт тик. Для burst — буферизованный канал: limiter := make(chan struct{}, burst), заполняешь его, горутина добавляет токены с интервалом. Берёшь токен: <-limiter. Это token bucket алгоритм. В продакшене используй golang.org/x/time/rate — он уже реализует token bucket с Wait, Allow, Reserve. Но на собесе хотят видеть реализацию на каналах.

Следующий вопрос

Что такое API error response формат?