Go编写定时器与定时任务详解(附第三方库gocron用法)_第1页
Go编写定时器与定时任务详解(附第三方库gocron用法)_第2页
Go编写定时器与定时任务详解(附第三方库gocron用法)_第3页
Go编写定时器与定时任务详解(附第三方库gocron用法)_第4页
Go编写定时器与定时任务详解(附第三方库gocron用法)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论