Golang 入门系列(八) cron定时任务

本文介绍了在Go语言中使用cron包实现定时任务的方法。通过示例代码展示了如何创建简单的定时任务以及多个并发运行的定时任务。文章还讨论了如何使用AddFunc和AddJob方法来调度不同的任务。

1、cron 表达式的基本格式

 Go 实现的cron 表达式的基本语法跟linux 中的 crontab基本是类似的。cron(计划任务),就是按照约定的时间,定时的执行特定的任务(job)。cron 表达式 表达了这种约定。 cron 表达式代表了一个时间集合,使用 6 个空格分隔的字段表示。如果对cron 表达式不清楚的,可以看看我之前介绍quartz.net 的文章, Quartz.NET总结(二)CronTrigger和Cron表达式 。
 

2、使用的包

github.com/robfig/cron

 

3、示例

  • 创建最简单的最简单cron任务
package main

import (
"github.com/robfig/cron"
"fmt"
)

func main() {
i := 0
c := cron.New()
spec := "*/5 * * * * ?"
c.AddFunc(spec, func() {
i++
fmt.Println("cron running:", i)
})
c.Start()

select{}
}

 

启动后输出如下:
D:\Go_Path\go\src\cronjob>go run singlejob.go
cron running: 1
cron running: 2
cron running: 3
cron running: 4
cron running: 5

 

 

  • 多个定时cron任务
package main

import (
    "github.com/robfig/cron"
    "fmt"
    )

type TestJob struct {
}

func (this TestJob)Run() {
    fmt.Println("testJob1...")
}

type Test2Job struct {
}

func (this Test2Job)Run() {
    fmt.Println("testJob2...")
}

//启动多个任务
func main() {
    i := 0
    c := cron.New()

    //AddFunc
    spec := "*/5 * * * * ?"
    c.AddFunc(spec, func() {
        i++
        fmt.Println("cron running:", i)
    })

    //AddJob方法
    c.AddJob(spec, TestJob{})
    c.AddJob(spec, Test2Job{})

    //启动计划任务
    c.Start()

    //关闭着计划任务, 但是不能关闭已经在执行中的任务.
    defer c.Stop()

    select{}
}

 


启动后输出如下:
D:\Go_Path\go\src\cronjob>go run multijob.go
cron running: 1
testJob1...
testJob2...
testJob1...
cron running: 2
testJob2...
testJob1...
testJob2...
cron running: 3
cron running: 4
testJob1...
testJob2...

 

4、最后

以上,就将Golang中如何创建定时任务做了简单介绍,实际使用中,大家可以可结合toml yaml 配置需要定时执行的任务。



在Go语言中可以使用`robfig/cron`包来实现Cron定时任务,从而实现定时发布的功能。以下是实现步骤及示例代码。 首先需要安装`robfig/cron`包,在终端中执行以下命令: ```bash go get github.com/robfig/cron/v3 ``` 示例代码如下,假设要定时发布一个消息: ```go package main import ( "fmt" "github.com/robfig/cron/v3" ) // 模拟发布消息的函数 func publishMessage() { fmt.Println("消息已发布") } func main() { // 创建一个新的cron实例 c := cron.New() // 添加定时任务,这里设置为每天的12:00执行发布操作 _, err := c.AddFunc("0 0 12 * * *", publishMessage) if err != nil { fmt.Println("添加定时任务出错:", err) return } // 启动cron c.Start() // 保持程序运行 select {} } ``` 上述代码中,首先导入了`robfig/cron`包,然后定义了一个`publishMessage`函数用于模拟消息发布。在`main`函数中,创建了一个新的`cron`实例,使用`AddFunc`方法添加了一个定时任务,这里的Cron表达式`0 0 12 * * *`表示每天的12:00执行。最后启动`cron`并使用`select{}`保持程序运行。 如果要设置多个定时发布任务,可以多次调用`AddFunc`方法添加不同的任务和Cron表达式,如引用[4]所示: ```go func Cron() { c := cron.New() c.AddFunc("0 0/5 * * * *", publishMessage0) c.AddFunc("0 1/5 * * * *", publishMessage1) c.AddFunc("0 2/5 * * * *", publishMessage2) c.AddFunc("0 3/5 * * * *", publishMessage3) c.AddFunc("0 4/5 * * * *", publishMessage4) // 启动 c.Start() } ``` 这里设置了5个定时任务,每个任务间隔5分钟。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值