在Go语言中,定时任务可以使用time
包和time.Ticker
类型来实现。
1、时间(time
)包
Go语言的time
包提供了处理时间的功能,包括定时任务、计时等。
以下是一些常用的time
包函数:
-
time.Now()
:获取当前时间。currentTime := time.Now()
-
time.Sleep(d Duration)
:使程序休眠指定的时间段。time.Sleep(2 * time.Second)
-
time.After(d Duration) <-chan Time
:返回一个通道,在指定的时间段后会向该通道发送当前时间。select { case <-time.After(5 * time.Second): fmt.Println("5 seconds have passed.") }
-
time.AfterFunc(d Duration, f func()) *Timer
:在指定的时间段后执行指定的函数。timer := time.AfterFunc(3 * time.Second, func() { fmt.Println("3 seconds have passed.") }) defer timer.Stop()
2、定时器(time.Ticker
)
time.Ticker
类型是time
包中的一种,它会以固定的时间间隔重复触发事件。
-
创建定时器:
ticker := time.NewTicker(1 * time.Second) defer ticker.Stop()
-
使用
Ticker
执行定时任务:for { select { case <-ticker.C: fmt.Println("Ticker task executed.") } }
解释
:
在上述例子中,ticker.C
是一个通道,它会在每个定时间隔触发一次。通过在select
语句中监听这个通道,可以执行定时任务。
3、示例
package main
import (
"fmt"
"time"
)
func main() {
// 定时任务 - 每隔1秒执行一次
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
fmt.Println("Ticker task executed.")
}
}
}
结果
:
这个程序会每隔1秒输出一次 “Ticker task executed.”。
注意
:
如果需要在应用程序退出前停止定时任务,请确保在合适的地方调用Stop()
方法。