GitHub - yudppp/throttle: lodash throttle like Go library (original) (raw)
Throttle
Throttle is an object that will perform exactly one action per duration. Do call the function f if a specified duration has passed since the last function f was called for this instance of Throttle.
Examples
single thread
package main
import ( "fmt" "time"
"github.com/yudppp/throttle")
func main() { throttler := throttle.New(time.Second) throttler.Do(func() { fmt.Println("first call") }) throttler.Do(func() { // this function called never. fmt.Println("second call") }) time.Sleep(time.Second) throttler.Do(func() { fmt.Println("third call") }) time.Sleep(time.Second) }
$ go run -race main.go
first call
third call
multiple threads
package main
import ( "fmt" "time"
"github.com/yudppp/throttle")
func main() { throttler := throttle.New(time.Second) var wg sync.WaitGroup for i := 0; i < 64; i++ { wg.Add(1) go func(i int) { throttler.Do(func() { fmt.Println("called") }) wg.Done() }(i) } wg.Wait() }
$ go run -race main.go
called
