Golang 如何使用Tickers
在很多情况下,我们希望在一个特定的时间间隔后重复执行一个特定的任务。在Golang中,我们借助于 Tickers 来实现这一目的 。
我们也可以将它们与 goroutines 一起使用,这样我们就可以在应用程序的后台运行这些任务,而不会破坏应用程序的流程。
我们在tickers中使用的函数是 NewTicker() 函数,它以 时间 为参数,我们可以在其中提供 秒 甚至 毫秒 。
例子1
下面的例子演示了我们如何在Golang中使用 ticker 。考虑一下下面的代码。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Starting the ticker")
ticker := time.NewTicker(1 * time.Second)
for _ = range ticker.C {
fmt.Println("Ticking..")
}
}
输出
如果我们用 go run main.go 命令运行上述代码,那么我们将得到以下输出。
Starting the ticker
Ticking..
Ticking..
应该注意的是,除非我们强行停止,否则上述程序会一直执行下去。我们可以用 CTRL+C 停止它 。
例2
我们还可以借助 goroutines 在后台运行ticker 。 请看下面的代码。
package main
import (
"fmt"
"time"
)
func inBackground() {
ticker := time.NewTicker(1 * time.Second)
for _ = range ticker.C {
fmt.Println("Ticking..")
}
}
func main() {
fmt.Println("Starting the ticker")
go inBackground()
fmt.Println("After goroutine..")
select {}
}
输出
如果我们用 go run main.go 命令运行上述代码,那么我们将得到以下输出。
Starting the ticker
After goroutine..
Ticking..
Ticking..
应该注意的是,上述程序将继续执行,除非我们强行停止它。我们可以用 CTRL+C 停止它。
例3
现在让我们考虑一个更高级的ticker使用案例,在这个案例中,我们将使用一个通道和一个选择语句,ticker也将运行一段时间。
请看下面的代码。
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(400 * time.Millisecond)
done := make(chan bool)
fmt.Println("Started!")
go func() {
for {
select {
case <-done:
return
case t := <-ticker.C:
fmt.Println("Tick at", t)
}
}
}()
time.Sleep(1600 * time.Millisecond)
ticker.Stop()
done <- true
fmt.Println("Stopped!")
}
输出
如果我们用 go run main.go 命令运行上述代码,那么我们将得到以下输出。
Started!
Tick at 2009-11-10 23:00:00.4 +0000 UTC m=+0.400000001
Tick at 2009-11-10 23:00:00.8 +0000 UTC m=+0.800000001
Tick at 2009-11-10 23:00:01.2 +0000 UTC m=+1.200000001
Tick at 2009-11-10 23:00:01.6 +0000 UTC m=+1.600000001
Stopped!