📜  golang 定期运行任务 (1)

📅  最后修改于: 2023-12-03 15:15:23.503000             🧑  作者: Mango

Golang 定期运行任务

在 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) 循环,来每秒执行一次任务。

推荐阅读