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.
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
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