go:在调用函数时指定最小运行间隔 有时候在打印日志的时候,在频繁的操作中,会被日志刷屏,但又想定期打印查看状态。这个时候可以利用time.Timer实现一个可指定最小执行间隔的函数,具体看代码吧。 ```go // Package tools ... package tools import ( "sync/atomic" "time" ) /* NewTickDo 是一个很有意思的小工具,每隔n秒**尝试**执行一个操作,用在打日志非常方便,避免刷屏 使用方法: tick = NewTickDo(time.Second) for{ tick.Do(func() { log.Infof("每秒执行一次,未到时间什么都不会发生,直接忽略") }) } */ func NewTickDo(du time.Duration) *TickDo { t := new(TickDo) // 第一次让它过期 ttimer := time.NewTimer(time.Nanosecond) time.Sleep(time.Nanosecond) t.lastCall.Store(ttimer) t.du = du return t } // TickDo ... type TickDo struct { lastCall atomic.Value du time.Duration } // Do 根据预定的时间,Do在调用时,会判定是否过了du时间,如果已过,则执行f(),否则忽略 // // tick.Do(func(){ // fmt.Printf("hello\n") // }) // // 每隔一定的时间才会出现hello打印 func (t *TickDo) Do(f func()) { select { case <-t.lastCall.Load().(*time.Timer).C: f() t.lastCall.Store(time.NewTimer(t.du)) default: } } ``` 来自 大脸猪 写于 2024-01-09 14:49 -- 更新于2024-01-16 20:33 -- 0 条评论