介绍 Go 断续器(Tickers)

介绍 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. 总结

我们学习如何使用断续器执行重复性任务,通过主线程或在后台执行任务。

你可能感兴趣的:(Golang,Tickers,golang)