📅  最后修改于: 2023-12-03 15:15:23.503000             🧑  作者: Mango
在 Golang 中定期运行任务非常容易。我们可以使用标准库中的 time
包来实现。
我们可以使用 time.Timer
来定义一个定时器,它会在指定的时间到达后发送一个值到通道中。你可以使用 time.NewTimer
来创建一个定时器,它会返回一个 *time.Timer
类型的值。使用 time.After
可以更容易的进行倒计时操作。
t := time.NewTimer(time.Second * 10)
<-t.C // 阻塞等待
上面的代码会让程序阻塞,直到定时器到达指定的时间。
如果你需要在定时器触发时执行一些任务,你可以在协程中监听定时器的通道。下面的代码会定时输出当前时间:
t := time.NewTicker(time.Second * 1)
for range t.C {
fmt.Println(time.Now())
}
当定时器到期时,t.C
上的值就会被发送,因此上面的代码每秒都会输出一次当前时间。
如果你需要定期运行某个任务,可以使用 time.Tick
函数。它和 time.NewTicker
的区别在于,它不允许你重置或停止定时器。下面的代码会每秒定期执行一次任务:
func task() {
fmt.Println("执行任务...")
}
func main() {
for range time.Tick(time.Second * 1) {
task()
}
}
在上面的代码中,我们使用 range time.Tick(time.Second * 1)
循环,来每秒执行一次任务。