介绍 Go 断续器(Tickers)
本文我们介绍 Go 断续器(Tickers)以及如何在应用中有效使用断续器。当我们需要在特定时间间隔内周期性重复执行动作,我们可以使用断续器。与协程一起使用可以实现在后台周期性执行任务。
1. Ticker 与 Timer 区别
首先需要理清Ticker 与 Timer 之间的差异:
- Ticker —— 重复性执行任务非常有用呢
- Timer —— 用于执行一次性任务
2. 简单示例
下面写个简单示例,实现每秒执行一次打印语句:
package main
import (
"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 教程
Tock
Tock
^C
3. 后台执行
现在我们可以使用断续器实现简单应用周期性执行任务。但如果让这些任务在后台运行呢?
如果我们需要任务在后台运行,我们可以把业务封装在协程中,让其异步执行不影响主程序。
下面我们创建backgroundTask()
函数,实现上节同样功能。然后在main函数中通过go 调用:
package main
import (
"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 continue
Tock
Tock
Tock
^C
4. 总结
我们学习如何使用断续器执行重复性任务,通过主线程或在后台执行任务。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/107418955