关于golang防抖函数的一些思考
debounce.go
package zutil
import (
"time"
)
func Debounce(fn func(int), ms float64) func(int) {
prev := time.Unix(0, 0)
return func(arg int) {
curr := time.Now()
delta := curr.Sub(prev).Seconds()
if delta < ms {
return
}
prev = curr // 可执行了之后,在刷新计时
fn(arg)
}
}
main.go
package main
import (
"fmt"
"time"
"github.com/xx/zutil"
)
func main() {
printHello := zutil.Debounce(func(cnt int) {
fmt.Println(fmt.Sprintf("hello %d", cnt))
}, 1)
for i := 0; i < 20; i++ {
t := time.After(200 * time.Millisecond)
<-t
printHello(i)
}
}