Создаёшь ticker: tick := time.NewTicker(time.Second / ratePerSec). В горутине перед каждой операцией ждёшь <-tick.C — это ограничивает скорость. Для burst: buffered channel размером burst, заполняешь тикером, потребитель читает. Пока буфер полон — операции мгновенные, когда кончился — ждёт тикера. Это по сути token bucket на каналах. Просто и идиоматично для Go. Для production лучше golang.org/x/time/rate — там больше контроля.
Как реализовать rate limiting через каналы?
Middle
235 просмотровAFK Offer AI
Как реализовать concurrent-safe counter?