A simple, thread-safe debounce library for Go that delays function execution until after a specified duration has elapsed since the last invocation. Perfect for rate limiting, reducing redundant operations, and optimizing performance in high-frequency scenarios.
- Zero allocations: No allocations on sunbsequent debounce calls
- Thread-safe: Safe for concurrent use across multiple goroutines
- Channel support: Can be used on top of
chan
with Chan function. - Configurable delays and limits: Set custom behaviour with WithDelay and WithLimit options
- Zero dependencies: Built using only Go standard library
go get github.com/floatdrop/debounce/v2
import (
"fmt"
"time"
"github.com/floatdrop/debounce/v2"
)
func main() {
debouncer := debounce.New(debounce.WithDelay(200 * time.Millisecond))
debouncer.Do(func() { fmt.Println("Hello") })
debouncer.Do(func() { fmt.Println("World") })
time.Sleep(time.Second)
// Output: World
}
go test -bench=. -benchmem
goos: darwin
goarch: arm64
pkg: github.com/floatdrop/debounce/v2
cpu: Apple M3 Max
BenchmarkDebounce_Insert-14 4860848 234.0 ns/op 0 B/op 0 allocs/op
BenchmarkDebounce_Do-14 5188065 230.8 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/floatdrop/debounce/v2 7.805s
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.