




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Go编写定时器与定时任务详解(附第三方库gocron用法)目录Go编写定时器和定时任务TimerTickergocron安装Demo总结
Go编写定时器和定时任务
在项目开发当中,可能会遇到这样的场景:
1A任务需要在多久之后执行一次(定时器)
2.B任务需要每隔多长时间执行一次(定时任务)
谈到定时任务,离不开linux的crontab.先简单了解下crontab
//每隔1秒执行一次
*/1****
//每隔1分钟执行一次
0*/1***
//每天0点执行一次
000**
//每月1号凌晨1点执行一次
0011*
//在1分、2分、3分执行一次
01,2,3***
//每天的0点、1点、2点执行一次
000,1,2**
使用crontab实现定时器和定时任务也可以,但是crontab默认只能精确到分钟,如果想要精确到秒可以使用for循环处理秒级人物
*****foriin$(seq111);doechotest/etc/demo/demo.txt;sleep1;done
本文简单介绍下go实现定时器和定时任务的用法以及简单介绍一个第三方库gocron的用法
Timer
1timer实现定时器(延迟执行),这个定时器只会触发一次.
使用于场景1(当然如果把下面的代码写在一个for循环中也可以实现定时任务)
Demo:
packagemain
import(
"fmt"
"time"
funcmain(){
t:=time.NewTimer(1*time.Second)
-t.C
fmt.Println("1s时间到")
结果:
1s时间到
2停止定时器
使用time.Stop()停止定时器
通过向通道发送一个信号,通知定时器是否关闭
Demo:
packagemain
import(
"fmt"
"time"
functest12(chchanint)bool{
timer:=time.NewTimer(1*time.Second)
select{
case-ch:
iftimer.Stop(){
fmt.Println("关闭定时器")
returntrue
default:
fmt.Println("继续执行定时器")
returntrue
funcmain(){
ch:=make(chanint,1)
//ch-1
gotest12(ch)
for{
}
结果:
继续执行定时器
重置定时器
Demo:
funcmain(){
//创建一个一个定时器
fmt.Println("定时器开始")
myT:=time.NewTimer(7*time.Second)//设置7秒后执行一次
//重置定时器为1s后执行
myT.Reset(1*time.Second)
-myT.C
fmt.Println("1s时间到",time.Now().Unix())
for{
结果:
定时器开始
1s时间到1648268475
Ticker
Ticker也是定时器,它是一个周期性的定时器使用场景2
设置3秒执行一次Demo
packagemain
import(
"fmt"
"time"
funcmain(){
ticker:=time.NewTicker(3*time.Second)
deferticker.Stop()
forrangeticker.C{
fmt.Println("执行的业务逻辑")
结果:
tickertickerticker...
tickertickerticker...
tickertickerticker...
gocron
一个第三方库实现定时任务场景2
安装
goget-u/go-co-op/gocron
s:=gocron.NewScheduler(time.UTC)
s.Every(5).Seconds().Do(func(){...})
s.Every("5m").Do(func(){...})
s.Every(5).Days().Do(fu
s.Every(1).Month(1,2,3).Do(func(){...})
s.Every(1).Day().At("10:30").Do(func(){...})
s.Every(1).Day().At("10:30;08:00").Do(func(){...})
s.Every(1).Day().At("10:30").At("08:00").Do(func(){...})
s.Every(1).MonthLastDay().Do(func(){...})
s.Every(2).MonthLastDay().Do(func(){...})
s.Cron("*/1****").Do(task)
s.StartAsync()
s.StartBlocking()
Demo
packagemain
import(
"fmt"
"time"
"/go-co-op/gocron"
funccron1(){
fmt.Println("cron1")
funccron2(){
fmt.Println("cron2")
funcmain(){
timezone,_:=time.LoadLocation("Asia/Shanghai")
s:=gocron.NewScheduler(timezone)
//每秒执行一次
s.Every(1).Seconds().Do(func(){
gocron1()
//每秒执行一次
s.Every(1).Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学音乐技能课件
- 路基防护与支挡结构设计课件解析
- 主管护师批判性思维试题及答案
- 2025执业护士考试复习重点试题及答案
- 职场潜力主管护师试题及答案
- 药学伦理与法规的重要性试题
- 毕加索课件图片
- 毕加索儿童绘画课件
- 行政管理实践中的经济法研究试题及答案
- 试用期工作心得15篇
- 农业昆虫学-形考测试一-国开(ZJ)-参考资料
- 环保组织项目监督管理制度
- GB/T 23473-2024林业植物及其产品调运检疫规程
- 山东虚拟电厂商业模式介绍
- 低分子肝素注射方法
- 人教版八年级体育 1.2常见运动损伤的预防和紧急处理 教案
- 【课件】在奉献中成就精彩人生 2024-2025学年统编版道德与法治七年级上册
- 2024至2030年成都市酒店市场前景调查及投资研究报告
- 网络安全保障服务方案(网络安全运维、重保服务)
- 创伤愈合的相关知识
- DL∕T 1474-2021 交、直流系统用高压聚合物绝缘子憎水性测量及评估方法
评论
0/150
提交评论