在线文档 > Golang练习 > 定时器-Ticker
在Go中,计时器timer
用于在将来某个时刻执行一次任务,而定期任务则使用 ticker
。以下是一个ticker的示例,它会定期执行,直到我们停止它。
package main
import (
"fmt"
"time"
)
func main() {
// Ticker使用与计时器类似的机制:通过一个channel来发送值。
// 这里我们将使用`select`内置函数在通道上等待,以便在每500ms时接收到发送的值。
ticker := time.NewTicker(500 * time.Millisecond)
done := make(chan bool)
go func() {
for {
select {
// done channel 用于接收外部传递的停止信号
case <-done:
return
// ticker.C的值则是定期发送的时间戳
case t := <-ticker.C:
fmt.Println("Tick at", t)
}
}
}()
// Tickers可以像计时器一样停止。
// 一旦停止了,ticker就不会再收到来自其通道的任何值。我们将在1600ms之后停止它。
time.Sleep(1600 * time.Millisecond)
ticker.Stop()
done <- true
fmt.Println("Ticker stopped")
}
运行结果如下:
$ 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
当我们运行此程序时,定时器会在我们停止它前运行 3 次。