package utils import ( "sync" "time" ) var CNLoc = time.FixedZone("UTC", 8*60*60) func MustParseCNTime(str string) time.Time { lastOpTime, _ := time.ParseInLocation("2006-01-02 15:04:05 -07", str+" +08", CNLoc) return lastOpTime } func NewDebounce(interval time.Duration) func(f func()) { var timer *time.Timer var lock sync.Mutex return func(f func()) { lock.Lock() defer lock.Unlock() if timer != nil { timer.Stop() } timer = time.AfterFunc(interval, f) } } func NewDebounce2(interval time.Duration, f func()) func() { var timer *time.Timer var lock sync.Mutex return func() { lock.Lock() defer lock.Unlock() if timer == nil { timer = time.AfterFunc(interval, f) } (*time.Timer)(timer).Reset(interval) } } func NewThrottle(interval time.Duration) func(func()) { var lastCall time.Time return func(fn func()) { now := time.Now() if now.Sub(lastCall) < interval { return } time.AfterFunc(interval, fn) lastCall = now } } func NewThrottle2(interval time.Duration, fn func()) func() { var lastCall time.Time return func() { now := time.Now() if now.Sub(lastCall) < interval { return } time.AfterFunc(interval, fn) lastCall = now } }