32 lines
463 B
Go
32 lines
463 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type Rate struct {
|
|
RPM int
|
|
mu sync.Mutex
|
|
}
|
|
|
|
func main() {
|
|
r := Rate{RPM: 10}
|
|
for i := 0; i < 10; i++ {
|
|
go func(j int) {
|
|
r.RateLimit()
|
|
fmt.Println("Rate limiting")
|
|
}(i)
|
|
}
|
|
time.Sleep(time.Minute)
|
|
}
|
|
|
|
func (r *Rate) RateLimit() {
|
|
// Lock for the fraction of a minute based on RPM
|
|
r.mu.Lock()
|
|
// Unlock after the fraction of a minute
|
|
time.Sleep(time.Minute / time.Duration(r.RPM))
|
|
r.mu.Unlock()
|
|
}
|