【Golang进阶】定时器

Ticker

1. 用时间阻塞主程序,从而控制ticker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main()  {
// 初始化ticker,每秒执行一次
var ticker = time.NewTicker(1 * time.Second)

go func() {
for t := range ticker.C {
fmt.Println("tick at", t)
}
}()
// 阻塞主程序防退出
time.Sleep(time.Second * 5)
// 主动终止
ticker.Stop()
}

输出结果

ticker1 at 2019-05-21 14:57:56.562591 +0800 CST m=+1.005065934
ticker1 at 2019-05-21 14:57:57.562549 +0800 CST m=+2.005016651
ticker1 at 2019-05-21 14:57:58.558122 +0800 CST m=+3.000583914
ticker1 at 2019-05-21 14:57:59.563205 +0800 CST m=+4.005660201
ticker1 at 2019-05-21 14:58:00.562585 +0800 CST m=+5.005033303

2. 用channel来精准控制次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func main()  {
var ticker2 = time.NewTicker(100 * time.Millisecond)

// 创建buffer为2的channel
c := make(chan int, 2)
go func() {
for t := range ticker2.C{
// 往channel写数据,写满buffer后终止程序
c <- 1
fmt.Println("ticker2 at ", t)
}
}()

time.Sleep(time.Second * 500)
fmt.Println("ticker stopped")
}

输出结果

ticker2 at 2019-05-21 14:57:55.65885 +0800 CST m=+0.101330668
ticker2 at 2019-05-21 14:57:55.758399 +0800 CST m=+0.200878747

本文标题:【Golang进阶】定时器

文章作者:Craze lee

发布时间:2019年05月21日 - 14:05

最后更新:2019年05月21日 - 15:05

原始链接:http://craze-lee.github.io/2019/05/21/Golang/进阶/定时器/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

您的支持将鼓励我继续创作!