如何在 Golang 中使用 Ticker?
go programmingserver side programmingprogramming
我们经常需要在特定的时间间隔后重复执行某项特定任务。在 Golang 中,我们借助 ticker 来实现这一点。
我们也可以将它们与 goroutines 一起使用,这样我们就可以在应用程序的后台运行这些任务,而不会中断应用程序的流程。
我们在 Ticker 中使用的函数是 NewTicker() 函数,它以 time 作为参数,我们可以在其中提供 秒 甚至 毫秒 的参数。
示例 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 在后台运行股票行情器。请考虑以下代码。
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!