golang中的 ticker和timer时间通道除了可以使用for select case语句来执行外, 还可以使用 for range语句来执行ticker或者timer时间通道。
for range time.Ticker 和 time.Timer时间通道使用示例
下面的示例演示了time.Ticker 和 time.Timer的区别和使用演示。
Ticker时间续断器 每隔2秒打印一次当前时间,打印60秒后退出程序; time.Timer定时器设定在10秒钟后执行一次输出 “时间到了+当前时间”
package mainimport ("fmt""time"
)func main() {// 时间续断器 每隔2秒钟执行一次ticker := time.NewTicker(2 * time.Second)// 定时器 在10秒钟后执行timer := time.NewTimer(10 * time.Second)// 另外启动一个协程来执行定时器逻辑 注意这里的协程会在主线程退出时退出!go func() {for t := range timer.C {fmt.Println(" 时间到了: " + t.Format(time.DateTime))}}()start := time.Now() // 开始时间,这个用来中断续断器// 这里的for语句会阻塞当前进程for nextTs := range ticker.C {fmt.Printf("%v \n", nextTs.Format(time.DateTime))// 执行60秒后退出if time.Since(start) >= 60*time.Second {// 停止续断器 注意,这个不会关闭通过,仅会停止向通道发送数据, 所以如果不break退出循环,则在下次range的时候会panic异常.ticker.Stop()break // 退出for range循环}}fmt.Println("------end-------") // 这个代码在退出for range循环后才会被执行
}
Ticker与Timer 区别图示
for select case Ticker Timer 使用示例参考: golang for select { case } 语句 time.Ticker每隔指定时间间隔就执行一次;time.Timer在指定的时间之后执行一次,Ticker和Timer的区别和用法总结-CSDN博客