How to Implement a Leaky Bucket Rate Limiter in Go
Use the golang.org/x/time/rate package to implement a leaky bucket rate limiter in Go.
package main
import (
"context"
"fmt"
"golang.org/x/time/rate"
)
func main() {
// Allow 2 events per second, with a burst of 4
limiter := rate.NewLimiter(rate.Limit(2), 4)
// Wait for permission (blocks if rate exceeded)
if err := limiter.Wait(context.Background()); err != nil {
fmt.Println("Rate limit exceeded or context cancelled")
return
}
fmt.Println("Event processed")
}
Install the dependency first:
go get golang.org/x/time/rate