Go定时器使用

news/2024/11/16 12:46:35/

概述

在软件开发场景,难免会用到定时器, 在go语言中,我们一般使用标准库time就可以实现很多定时器功能

定时器种类

  • 单次定时器: 创建后只触发一次
  • 周期定时器: 每隔一段指定的时间触发一次

单次定时器

创建方法

方法一:使用 time.NewTimer

使用 time包里面的 NewTimer接口,指定时间间隔,可以创建一个单次定时器,触发后自动停止
创建代码:

timer := time.NewTimer(1 *  time.Second) // 1s后触发<-time.C // 这里会阻塞等待定时器触发

方法二: 使用 time.After

表示快速创建一个在指定间隔后触发的定时器,并将定时器的 chan 返回,触发后定时器自动停止并销毁
创建代码:

<-time.After(5 * time.Second) // 延时等待5s

注意,这种方式延时,每次都会创建一个新的定时器,且只有到了定时器触发后才会自动销毁,所以不适合频繁调用的场景,比如 for循环内。对于 for循环内的延时, 建议如下:

  • 仅表示延时一段时间, 应该改用 time.Sleep
  • 表示等待某个chan的同时指定超时,可以改用 time.NewTimer创建一个单次定时器,再需要复用的时候,调用 timer.Reset对定时器进行重置即可重复使用

周期性定时器

创建方法

ticker := time.NewTicker(1 * time.Second)
for _ := range ticker.C {// 这里处理定时器周期性触发后的逻辑
}// 或者
for {select {case <-ticker.C:// 这里处理定时器触发时的逻辑}
}

使用周期性定时器时,建议借助外部传入的 辅助chan来控制定时器合理的停止,以及所在的协程正常退出, 避免出现协程资源和定时器资源泄漏


http://www.ppmy.cn/news/68.html

相关文章

zabbix监控Nginx

目录 一、环境准备 二、部署Nginx被监控端 三、自定义Nginx监控key 四、给目标主机创建监控项 一、环境准备 搭建zabbix基础环境 zabbix基础环境部署参照&#xff1a;zabbix基础环境部署_桂安俊kylinOS的博客-CSDN博客 以下实验部署均基于上述环境 二、部署Nginx被监控端…

【Canvas】js用canvas绘制一个钟表时钟动画效果

学习JavaScript的看过来&#xff0c;有没有兴趣用Canvas画图呢&#xff0c;可以画很多有趣的事物&#xff0c;自由发挥想象&#xff0c;收获多多哦&#xff0c;旋转角度绘图这个重点掌握到了吗&#xff0c;这里有一个例子&#xff0c;如何用canvas画钟表时钟动图效果&#xff0…

防火墙原理讲解——练习实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 一防火墙基础 二防火墙配置 三防火墙的高级应用 四.实验图纸 五.实验命令 一防火…

快速上手 TypeScript

快速上手 TypeScript ypeScript 简称 TS &#xff0c;既是一门新语言&#xff0c;也是 JS 的一个超集&#xff0c;它是在 JavaScript 的基础上增加了一套类型系统&#xff0c;它支持所有的 JS 语句&#xff0c;为工程化开发而生&#xff0c;最终在编译的时候去掉类型和特有的语…

考虑车轮纵向滑动的无人自行车平衡控制实现

摘要: 针对无人自行车在出现车轮纵向滑动下的平衡控制问题,提出一种将自行车车轮纵向滑动引入控制器的方法来实现在一定程度车轮纵向滑动下的无人自行车平衡运动控制。首先引入一种自行车线性变参数(linearparameter-varying,LPV)动力学模型,其次将卡尔曼滤波算法估算的自行…

基于样本平衡策略的多源迁移学习方法及其在乙烯精馏塔质量指标预测的应用

摘要: 基于数据驱动的工业过程建模需要依赖大量的标记良好的数据集,但与目标任务直接相关的标注数据往往是有限的。因此,可以利用与其具有相关性的辅助训练数据进行建模以实现任务迁移。然而,样本的不平衡问题一定程度上影响了迁移学习的性能表现。因此,提出了一种基于样本…

【数据结构与算法】LinkedList与链表

✨个人主页&#xff1a;bit me ✨当前专栏&#xff1a;数据结构 ✨每日一语&#xff1a;假如困境有解&#xff0c;何须心烦意乱&#xff1b;倘若困境无解&#xff0c;又何须郁郁寡欢。每个人都有两次生命&#xff0c;当你意识到你只有一次生命的时候&#xff0c;你的第二次生命…

Python使用magic判断文件MIME类型

文章目录官网安装使用判断文件的MIME类型支持中文的代码问题官网 GitHub - ahupp/python-magic: A python wrapper for libmagic 安装 pip install python-magic pip install python-magic-bin使用 判断文件的MIME类型 代码 # encodingutf-8 import magic #pip install pyt…