golang 定时器, timer, ticker

golang 定时器, timer, ticker Go 可以借助 time.After/time.Ticker 来实现延迟/定时触发器, 主要原理是借助无缓冲 channel 无数据时读取操作会阻塞当前协程, Go 会在给定的时间后向 channel 中写入一些数据 (当前时间), 故阻塞的协程可以恢复运行, 达到延迟或定时执行的功能。 time.Ticker ticker 只要定义完成,从此刻开始计时, 不需要任何其他的操作, 每隔固定时间都会触发。 ticker := time.NewTicker(500 * time.Millisecond) go func() { for t := range ticker.C { fmt.Println("Tick at", t) } }() 立即执行一次 ticker := time.NewTicker(period) for ; true; <-ticker.C { // ... } timer 使用timer定时器,超时后需要重置,才能继续触发。 d := time.Duration(time.Second*2) t := time.NewTimer(d) defer t.Stop() for { <- t.C fmt.Println("timeout...") // need reset t.Reset(time.Second*2) } 执行若干次后退出 func main() { // 创建一个计时器 timeTicker := time.NewTicker(time.Second * 2) i := 0 for { if i > 5 { break } fmt.Println(time.Now().Format("2006-01-02 15:04:05")) i++ <-timeTicker.C } // 清理计时器 timeTicker.Stop() } https://my.oschina.net/u/943306/blog/149395 ...

2017-09-10 · 1 min · 170 words · -