shad-go/ratelimit
2021-03-05 14:20:55 +03:00
..
ratelimit.go Update ratelimit. Simplify solution 2021-03-05 14:07:25 +03:00
ratelimit_test.go Update ratelimit. Simplify solution 2021-03-05 14:07:25 +03:00
README.md [ratelimit] Fix readme. 2021-03-05 14:20:55 +03:00

ratelimit

Напишите примитив синхронизации, ограничивающий число вызовов на интервале времени.

func NewLimiter(maxCount int, interval time.Duration) *Limiter

func (l *Limiter) Acquire(ctx context.Context) error

func (l *Limiter) Stop()

Limiter должен гарантировать, что на любом интервале времени interval, не больше maxCount вызовов Acquire могут завершиться без ошибки.

Каждый вызов Acquire должен либо завершаться успешно, либо завершаться с ошибкой в случае если ctx отменили во время ожидания. Об отмене ctx нужно узнавать по закрытию канала ctx.Done(). Если ctx отменён, нужно возвращать ошибку ctx.Err().

Вызовы Acquire() после Stop(), должны сразу завершаться с ошибкой ErrStopped.