golang中的 ticker和timer时间通道除了可以使用for select case语句来执行外, 还可以使用 for range语句来执行ticker或者timer时间通道。
下面的示例演示了time.Ticker 和 time.Timer的区别和使用演示。
Ticker时间续断器 每隔2秒打印一次当前时间,打印60秒后退出程序; time.Timer定时器设定在10秒钟后执行一次输出 “时间到了+当前时间”
- package main
-
- import (
- "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循环后才会被执行
- }
for select case Ticker Timer 使用示例参考: golang for select { case } 语句 time.Ticker每隔指定时间间隔就执行一次;time.Timer在指定的时间之后执行一次,Ticker和Timer的区别和用法总结-CSDN博客