golang定时器Ticker
time包下有一个Ticker结构体
// Ticker保管一个通道,并每隔一段时间向其传递"tick"。
type Ticker struct {
C <-chan Time // 周期性传递时间信息的通道.
r runtimeTimer
}
func NewTicker(d Duration) *Ticker{}
NewTicker返回一个新的Ticker,该Ticker包含一个通道字段,并会每隔时间段d,就向该通道发送当时的时间。它会调整时间间隔或者丢弃tick信息以适应反应慢的接收者。如果d<=0会panic。关闭该Ticker可以释放相关资源。
func (t *Ticker) Stop()
Stop关闭一个Ticker。在关闭后,将不会发送更多的tick信息。Stop不会关闭通道t.C,以避免从该通道的读取不正确的成功。
例子
package main
import (
"fmt"
"time"
)
func main() {
t := time.NewTicker(5 * time.Second) //创建定时器
defer t.Stop()
go sync(t)
select {
}
}
func sync(t *time.Ticker) {
for {
// 每5秒中从chan t.C 中读取一次
<-t.C
fmt.Println("执行数据备份任务:", time.Now().Format("2006-01-02 15:04:05"))
}
}