package timer import ( "sync" "time" ) // Debouncer 防抖器 type Debouncer struct { interval time.Duration callback func() timer *time.Timer mu sync.Mutex } // NewDebouncer 创建一个防抖器 func NewDebouncer(interval time.Duration, callback func()) *Debouncer { return &Debouncer{ interval: interval, callback: callback, } } // Trigger 触发事件 func (d *Debouncer) Trigger() { d.mu.Lock() defer d.mu.Unlock() if d.timer != nil { d.timer.Stop() } d.timer = time.AfterFunc(d.interval, d.callback) } // Throttler 节流器 type Throttler struct { interval time.Duration callback func() lastCalled time.Time mu sync.Mutex } // NewThrottler 创建一个节流器 func NewThrottler(interval time.Duration, callback func()) *Throttler { return &Throttler{ interval: interval, callback: callback, } } // Trigger 触发事件 func (t *Throttler) Trigger() { t.mu.Lock() defer t.mu.Unlock() now := time.Now() if now.Sub(t.lastCalled) >= t.interval { go t.callback() t.lastCalled = now } }