golang中Ticker如何使用
在golang中,Ticker是一个定时触发的计时器,可以周期性地生成时间信号。它与time.NewTimer类似,不同之处在于,它可以按照设定的时间间隔多次触发。
如何使用Ticker?
ticker := time.NewTicker(time.Duration(interval) * time.Second)
这条语句将创建一个Ticker,其时间间隔为interval秒。为了停止Ticker,可以使用ticker.Stop()方法。
让我们看一个简单的例子。
func main() {
ticker := time.NewTicker(1 * time.Second)
quit := make(chan struct{})
go func() {
for {
select {
case <-ticker.C:
fmt.Println("Ticker ticked!")
case <-quit:
ticker.Stop()
return
}
}
}()
time.Sleep(5 * time.Second)
quit <- struct{}{}
fmt.Println("Ticker stopped.")
}
在此示例中,我们使用了select语句,它会在ticker.C信道上阻塞,等待定期发生的时间脉冲。同时,我们也提供了一个quit信道,用于在5秒后停止Ticker。这个例子中,Ticker每秒钟会发出一个时间脉冲信号,打印“Ticker ticked!",直到它被停止。然后会打印"Ticker stopped."。
Ticker和Timer的区别?
函数time.NewTimer设置的时间到达后,将向其C通道发送一个当前时间形式的值,而函数time.NewTicker则从 次Tick开始,持续间隔duration的时间段后,向C通道发送一个事件。
因此,在执行一些任务时,如果任务需要周期性执行,就应该使用Ticker;否则,如果只需要执行一次或需要对任务执行间隔进行计时,就应该使用Timer。
Ticker和Timer都是来源于tm包,其代码查看方式为:
type Ticker struct {
C <-chan Time // 发送时间脉冲的信道。
r runtimeTimer
// contains filtered or unexported fields
}
type Timer struct {
C <-chan Time // 发送时间的值的信道。
r runtimeTimer
// contains filtered or unexported fields
}
注意:time.NewTicker和time.NewTimer都会返回一个指针。因此,如果你需要保留对这些项的引用,请不要忘记作为指针调用它们。
