2025-04-07 01:33:31 +02:00

26 lines
378 B
Go

package main
import "time"
type RateLimiter struct {
ticker *time.Ticker
}
func NewRateLimiter(n int) *RateLimiter {
limit := time.Second / time.Duration(n)
return &RateLimiter{ticker: time.NewTicker(limit)}
}
func (r *RateLimiter) CanTake() bool {
select {
case <-r.ticker.C:
return true
default:
return false
}
}
func (r *RateLimiter) Take() {
<-r.ticker.C
}