time.Ticker适用于固定间隔的周期性任务,但不保证绝对准时;需手动Stop防止goroutine泄漏;任务耗时超间隔会堆积触发,严格串行应改用time.Sleep。
time.Ticker 是 Go 中实现周期性定时任务最直接、轻量的方式,适合固定间隔执行(如每5秒拉一次状态、每分钟清理缓存),但要注意它不保证绝对准时,也不适合需要高精度或一次性延迟的场景。
Ticker 创建后会持续发送时间戳到其 C 通道,你只需在 for-select 循环中接收即可:
ticker := time.NewTicker(10 * time.Second) defer ticker.Stop() // 记得停止,避免 goroutine 泄漏for { select { case <-ticker.C: fmt.Println("执行任务:", time.Now()) // 这里放你的业务逻辑,比如 HTTP 请求、日志上报、指标采集 } }
注意:time.NewTicker 立即触发第一次发送(不是创建后等待第一个间隔),所以首次执行是“立刻+周期”,如果想延后首次执行,可先 time.Sleep 或改用 time.AfterFunc + 手动重启。
tine 残留Ticker 不会自动停止,忘记调用 Stop() 会导致底层 ticker goroutine 持续运行,造成资源泄漏。常见安全写法:
ticker.Stop()(适用于函数内短期使用)context.Context 实现可控退出:ctx, cancel := context.WithCancel(context.Background()) defer cancel()ticker := time.NewTicker(30 * time.Second) defer ticker.Stop()
go func() { for { select { case <-ticker.C: doWork() case <-ctx.Done(): return // 主动退出循环 } } }()
如果任务耗时 > Ticker 间隔(比如每2秒执行一次,但某次处理花了5秒),ticker.C 会缓存多个未读时间点,下次 select 可能“连发”几次。这不是 bug,而是设计行为 —— 它保证“至少按间隔触发”,但不跳过。
若需严格串行、不堆积,推荐用 time.Sleep 替代 Ticker:
for {
doWork()
select {
case <-time.After(2 * time.Second):
// 等待下一轮,确保上一轮彻底结束再计时
case <-ctx.Done():
return
}
}或者用带缓冲的 channel + 单 goroutine 消费,主动控制节奏。
Ticker ≠ Timer ≠ AfterFunc:
time.Timer:只触发一次,适合“延迟 X 秒后执行”time.AfterFunc(d, f):也是单次,但把函数封装进去了,更简洁time.Ticker:周期性,适合“每隔 X 秒执行”,且支持随时 Stop()
不要用多个 Timer 模拟 Ticker,性能差还难管理;也不要让 Ticker 承担一次性任务 —— 该用 Timer 就用 Timer。
基本上就这些。Ticker 简单,但用对的关键在于理解它的“通道语义”和生命周期管理。
# go
# golang
# for
# 封装
# select
# 循环
# 堆
# channel
# bug
# 也不
# 首次
# 多个
# 适用于
# 但不
# 第一个
# 几次
# 只需
# 执行时间
# 这不是
相关文章:
如何通过智能用户系统一键生成高效建站方案?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
如何选择PHP开源工具快速搭建网站?
相册网站制作软件,图片上的网址怎么复制?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
北京网站制作网页,网站升级改版需要多久?
实现虚拟支付需哪些建站技术支撑?
深入理解Android中的xmlns:tools属性
制作网站公司那家好,网络公司是做什么的?
如何快速生成橙子建站落地页链接?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站主机选购指南:核心配置优化与品牌推荐方案
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何选择香港主机高效搭建外贸独立站?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
想学网站制作怎么学,建立一个网站要花费多少?
如何做静态网页,sublimetext3.0制作静态网页?
制作网站的模板软件,网站怎么建设?
C#怎么使用委托和事件 C# delegate与event编程方法
建站之星Pro快速搭建教程:模板选择与功能配置指南
网站制作费用多少钱,一个网站的运营,需要哪些费用?
网站制作壁纸教程视频,电脑壁纸网站?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
建站三合一如何选?哪家性价比更高?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
外贸公司网站制作,外贸网站建设一般有哪些步骤?
建站主机功能解析:服务器选择与快速搭建指南
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
建站之星如何快速生成多端适配网站?
建站主机如何选?高性价比方案全解析
网站制作公司排行榜,四大门户网站排名?
建站之星×万网:智能建站系统+自助建站平台一键生成
移民网站制作流程,怎么看加拿大移民官网?
建站主机选购指南与交易推荐:核心配置解析
宝塔面板如何快速创建新站点?
网站设计制作企业有哪些,抖音官网主页怎么设置?
*请认真填写需求信息,我们会在24小时内与您取得联系。