Golang time.Ticker.Stop()函数及示例
在Golang中,time包提供了一个功能强大的定时器Ticker,该定时器可以以指定的时间间隔触发特定的操作。同时,该定时器还提供了一个Stop()函数,用于关闭定时器,以便结束循环或避免资源浪费。本文将使用示例代码来展示如何使用time.Ticker.Stop()函数。
示例代码
我们先来看如下简单的Golang程序:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
fmt.Println("Ticker tick")
}
}
}
在上面的程序中,我们创建了一个时间间隔为1秒的Ticker,并使用for循环以阻塞的方式监听其C通道。当每秒钟的时间结束后,定时器会向C通道发送一个消息,我们便通过select语句来读取该通道,并打印出一条简单的文字。当我们运行该程序时,控制台会反复不断地输出”Ticker tick”这个字符串,直到我们通过以上的defer语句手动关闭定时器。
上面这段代码演示了如何使用定时器周期性地执行某项任务。但如果我们在某些条件下需要临时关闭定时器,该怎么办呢?这时,Stop()函数就可以为我们提供帮助。
下面,我们给出的示例演示了如何在接收到终止信号时,关闭定时器。
package main
import (
"fmt"
"os"
"os/signal"
"time"
)
func main() {
done := make(chan bool)
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
go func() {
<-signalChan
fmt.Println("Interrupt signal received")
done <- true
}()
for {
select {
case <-ticker.C:
fmt.Println("Ticker tick")
case <-done:
fmt.Println("Done!")
return
}
}
}
在上面这段代码中,我们创建了一个缓存为1的信号通道signalChan,然后使用signal.Notify()函数将终止信号(os.Interrupt)传递给该通道。当该函数执行到触发信号的代码行时,我们从信号通道接受该信号并打印出一条提示信息。我们还创建了一个名为done的通道,用于等待信号通道的信号。当done通道接收到值时,该程序会退出,从而停止定时器。
结论
在本文中,我们演示了如何使用time.Ticker.Stop()函数来关闭Golang的定时器Ticker。在实际应用中,我们可以利用该函数来临时停止定时器或在结束程序之前明确地停止所有活动的定时器,从而避免资源浪费或不必要的定时任务执行。