Go 语言中的两个定时任务库
今天给大家介绍两个 Go 语言可以用来做定时任务的库,直接上 demo 就好啦。
1. robfig/cron
执行如下命令进行安装:
go get -u github.com/robfig/cron
每分钟执行一次:
package main
import (
"log"
"github.com/robfig/cron"
)
func main() {
i := 0
c := cron.New()
spec := "0 */1 * * * *"
c.AddFunc(spec, func() {
i++
log.Println("execute per second", i)
})
c.Start()
select {}
}
其中注意select的用法:
golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。
每天上午9点到12点的第2和第10分钟执行:
package main
import (
"fmt"
"github.com/robfig/cron"
)
func main() {
spec := "2,10 9-12 * * *" // 每天上午9点到12点的第2和第10分钟执行
c := cron.New()
c.AddFunc(spec, myFunc)
c.Start()
select {}
}
func myFunc() {
fmt.Println("execute")
}
2. jasonlvhit/gocron
执行如下命令进行安装:
go get -u github.com/jasonlvhit/gocron
每隔1秒执行一个任务,每隔4秒执行另一个任务:
package main
import (
"fmt"
"time"
"github.com/jasonlvhit/gocron"
)
func task() {
fmt.Println("I am runnning task.", time.Now())
}
func superWang() {
fmt.Println("I am runnning superWang.", time.Now())
}
func main() {
s := gocron.NewScheduler()
s.Every(1).Seconds().Do(task)
s.Every(4).Seconds().Do(superWang)
sc := s.Start() // keep the channel
go test(s, sc) // wait
<-sc // it will happens if the channel is closed
}
func test(s *gocron.Scheduler, sc chan bool) {
time.Sleep(8 * time.Second)
s.Remove(task) //remove task
time.Sleep(8 * time.Second)
s.Clear()
fmt.Println("All task removed")
close(sc) // close the channel
}
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2019-11-29 Centos7下使用Ceph-deploy快速部署Ceph分布式存储-操作记录
2019-11-29 Nginx + Lua 搭建网站WAF防火墙
2018-11-29 kubernetes控制器之DaemonSet
2018-11-29 搞定 Kubernetes 基于flannel 的集群网络
2018-11-29 Hadoop+HBase+Spark+Hive环境搭建
2018-11-29 部署高可用keepalived组件