Skip to main content
 首页 » 编程设计

介绍 Go 断续器(Tickers)

2022年07月19日179bhlsheji

介绍 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
阅读延展