26 lines
408 B
Go
26 lines
408 B
Go
package utils
|
|
|
|
import "time"
|
|
|
|
type Throttle struct {
|
|
interval time.Duration
|
|
lastAction time.Time
|
|
}
|
|
|
|
func NewThrottle(interval time.Duration) Throttle {
|
|
return Throttle{
|
|
interval: interval,
|
|
lastAction: time.Unix(0, 0),
|
|
}
|
|
}
|
|
|
|
func (t *Throttle) Trigger(action func()) {
|
|
if action == nil {
|
|
return
|
|
}
|
|
if time.Now().After(t.lastAction.Add(t.interval)) {
|
|
t.lastAction = time.Now()
|
|
action()
|
|
}
|
|
}
|