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 chanwith 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/v2import (
	"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=. -benchmemgoos: 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.