介绍 Go 断续器(Tickers)
本文我们介绍 Go 断续器(Tickers)以及如何在应用中有效使用断续器。当我们需要在特定时间间隔内周期性重复执行动作,我们可以使用断续器。与协程一起使用可以实现在后台周期性执行任务。
1. Ticker 与 Timer 区别
首先需要理清Ticker 与 Timer 之间的差异:
Ticker —— 重复性执行任务非常有用呢Timer —— 用于执行一次性任务
2. 简单示例
下面写个简单示例,实现每秒执行一次打印语句:
package mainimport ("fmt""time")func main() {fmt.Println("Go Tickers 教程")// 创建新的断续器,每秒执行ticker := time.NewTicker(1 * time.Second)// 断续器每个周期内执行——打印tock、for _ = range ticker.C {fmt.Println("tock")}}
现在运行程序会一直执行,除非ctrl-c
结束程序。
Go Tickers 教程TockTock^C
3. 后台执行
现在我们可以使用断续器实现简单应用周期性执行任务。但如果让这些任务在后台运行呢?
如果我们需要任务在后台运行,我们可以把业务封装在协程中,让其异步执行不影响主程序。
下面我们创建backgroundTask()
函数,实现上节同样功能。然后在main函数中通过go 调用:
package mainimport ("fmt""time")func backgroundTask() {ticker := time.NewTicker(1 * time.Second)for _ = range ticker.C {fmt.Println("Tock")}}func main() {fmt.Println("Go Tickers 教程")go backgroundTask()// 下面语句在第一次 `tock`被打印到控制台之前执行fmt.Println("The rest of my application can continue")// 这里空select{} 为了保持main函数一致活动// 否则backgroundTask没有机会执行select{}}
Ok,现在执行程序,main函数正常启动,接着后台程序也启动了:
Go Tickers 教程The rest of my application can continueTockTockTock^C
4. 总结
我们学习如何使用断续器执行重复性任务,通过主线程或在后台执行任务。