December 17, 2019

161 words 1 min read

uber-go/ratelimit

uber-go/ratelimit

A Golang blocking leaky-bucket rate limit implementation

repo name uber-go/ratelimit
repo link https://github.com/uber-go/ratelimit
homepage
language Go
size (curr.) 20 kB
stars (curr.) 1425
created 2016-09-10
license MIT License

Go rate limiter

This package provides a Golang implementation of the leaky-bucket rate limit algorithm. This implementation refills the bucket based on the time elapsed between requests instead of requiring an interval clock to fill the bucket discretely.

Create a rate limiter with a maximum number of operations to perform per second. Call Take() before each operation. Take will sleep until you can continue.

import (
	"fmt"
	"time"

	"go.uber.org/ratelimit"
)

func main() {
    rl := ratelimit.New(100) // per second

    prev := time.Now()
    for i := 0; i < 10; i++ {
        now := rl.Take()
        fmt.Println(i, now.Sub(prev))
        prev = now
    }

    // Output:
    // 0 0
    // 1 10ms
    // 2 10ms
    // 3 10ms
    // 4 10ms
    // 5 10ms
    // 6 10ms
    // 7 10ms
    // 8 10ms
    // 9 10ms
}
comments powered by Disqus