如何在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的一个更高级的用例,在这个用例中,我们将使用一个通道和一个select语句,并且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!
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP