

新闻资讯
技术学院Go 的 time 包通过 time.Ticker 和 time.AfterFunc 可实现轻量周期任务;time.Ticker 适合固定间隔循环执行,需调用 Stop() 防泄漏。
用 Go 的 time 包可以轻松实现简单、轻量的周期性定时任务,无需引入第三方库。核心在于 time.Ticker 和 time.AfterFunc,适用于对精度要求不高、不需持久化或分布式支持的场景。
time.Ticker 是最常用的方式,适合需要持续、规律执行的任务(如每 5 秒检查一次状态)。它会按指定周期发送时间戳到通道,配合 select 可安全退出。
time.NewTicker(duration),例如 tick := time.NewTicker(10 * time.Second)
tick.C,每次收到时间即执行任务逻辑tick.Stop(),避免 goroutine 泄漏和资源占用示例片段:
go func() {time.AfterFunc 适合只执行一次的延后任务;若想模拟周期行为,可在函数体内递归调用自身(注意控制并发与退出)。
time.AfterFunc(3*time.Second, func(){ ... })
AfterFunc,但要避免无限嵌套导致栈溢出,推荐用 goroutine 封装示例(带退出控制):
go func() {真实项目中,任务常随服务启停而启动/取消。context.Context 是标准做法,可与 time.Ticker 安全协同。
context.WithCancel 或 context.WithTimeout 创建可取消上下文ctx.Done(),收到信号后主动 Stop() Ticker 并返回context.Context 和间隔时长,提升复用性time 包方案简洁高效,但有明确边界:

robfig/cron 等库