Timer计时器
如果希望在将来的某个时间点执行Go代码,或者在某个时间间隔重复执行Go代码,使用Go内置的timer和ticker功能。
先看定时器timer,然后再看计时器ticker。定时器代表未来的单个事件。告诉定时器需要等待多长时间,它返回一个通道,时间到后通道得到通知。如例所示设置定时器将等待2秒,语法
如果您只是想等待,则可以使用time.Sleep也可以实现相同的效果。使用定时器的好处是可以在它触发之前取消。下面是一个例子,定时器2需要足够的时间来触发,但立刻就被停止。因此结果是,第一个定时器在程序运行~2秒后触发,但第二个定时器触发之前就被停止了。
![ce0ae899a1b17e6758a289be33f8f1c4.png](https://i-blog.csdnimg.cn/blog_migrate/c89c5028209c8305596f12777ddf0884.jpeg)
结果:
$ go run timers.go
Timer 1 fired
Timer 2 stopped
Ticker计时器
定时器是用来在未来做一次性任务时使用的,如果要重复地以指定间隔做某件事情时使用计时器。
这里有一个例子,一个ticker在我们停止它之前会周期性地触发,ticker使用类似于timers的机制:通道。例子中,将在通道上使用select语句来等待每500毫秒到达的值。
可以像停止定时器一样停止计时器。一旦计时器停止,无法在其通道上接收更多的值。1600ms后停止程序,在此之前,ticker应该触发了3次。
![f7273820a8bee8e6c498669d5f0194fc.png](https://i-blog.csdnimg.cn/blog_migrate/983f302ef295ed609f3157cc1928ff64.jpeg)
结果:
$ go run tickers.go
Tick at 2012-09-23 11:29:56.487625 -0700 PDT
Tick at 2012-09-23 11:29:56.988063 -0700 PDT
Tick at 2012-09-23 11:29:57.488076 -0700 PDT
Ticker stopped