golang cronexpr定时任务包使用
包获取
go get -u github.com/gorhill/cronexpr
创建一个定时任务
expr, err = cron.Parse("* * * * *");
获得任务的下次执行时间
nextTime = expr.Next(now)
package main import (
"fmt"
"time"
cron "github.com/gorhill/cronexpr"
) type CronJob struct {
expr *cron.Expression
nextTime time.Time //expr.now
} func main() { var (
cronJob *CronJob
expr *cron.Expression
now time.Time
scheduleTable map[string]*CronJob // key 任务的名称
) scheduleTable = make(map[string]*CronJob) now = time.Now()
expr = cron.MustParse("*/5 * * * * * *") cronJob = &CronJob{
expr: expr,
nextTime: expr.Next(now),
} scheduleTable["job1"] = cronJob expr = cron.MustParse("*/10 * * * * * *") cronJob = &CronJob{
expr: expr,
nextTime: expr.Next(now),
} // 将任务注册到调度表中 scheduleTable["job2"] = cronJob // 调度协程
go func() {
var(
_now time.Time
cname string
cronjob *CronJob
) for {
_now = time.Now()
for cname, cronjob = range scheduleTable {
if cronjob.nextTime.Before(_now) || cronjob.nextTime.Equal(_now) {
go func(name string) {
fmt.Println("exec", name)
}(cname) cronjob.nextTime = cronjob.expr.Next(_now)
fmt.Println("next exec time: ",cronjob.nextTime)
}
} select {
case <-time.NewTimer(100 * time.Millisecond).C: //睡眠
}
}
}() time.Sleep(time.Minute*3)
}
golang cronexpr定时任务包使用的更多相关文章
- golang的定时任务
golang的定时任务使用的是cron这个包来解决的 官方文档地址:https://godoc.org/github.com/robfig/cron cron包的基础知识 字段名 是否必须 允许的值 ...
- Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫
Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...
- 一键解决 go get golang.org/x 包失败
问题描述 当我们使用 go get.go install.go mod 等命令时,会自动下载相应的包或依赖包.但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况. ...
- 19-03【golang】strings包
golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串 Contains(s, substr stri ...
- 关于golang.org/x包问题
关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...
- Golang Gin 项目包依赖管理 godep 使用
Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...
- golang 关于golang.org/x包问题
关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...
- Golang的json包
encoding/json encoding/json是官方提供的标准json, 实现RFC 7159中定义的JSON编码和解码.使用的时候需要预定义struct,原理是通过reflection和in ...
- Golang官方log包详解
Golang官方log包详解 以下全是代码, 详解在注释中, 请从头到尾看 // Copyright 2009 The Go Authors. All rights reserved. // Use ...
随机推荐
- 【XSY1519】彩灯节 DP 数学 第二类斯特林数
题目大意 有\(n\)盏灯,\(m\)个限制.每个限制\((x,y)\)表示第\(x\)盏灯与第\(y\)盏灯之间必须且只能亮一盏. 记一种情况\(x\)亮着的灯的数量为\(f_x\),求\( ...
- thymeleaf中的判断总结
判断String字符串,添加引号 th:class="${flag=='forum.html'}?'active'" 判断boolean类型,注意不能当成字符串处理,不能添加引号 ...
- C语言中的类型转换——将字符串s转换为整数型(int)类型
在讲类型转换之前,我们先要理解下C语言中单引号和双引号的区别. 先讲双引号,双引号就是字符串,我们要证实我们的想法,我选择写一段代码看看开: #include <stdio.h> int ...
- Neovim中提示Error: Required vim compiled with +python
Neovim在编辑python文件时出现错误提示,如下图 原因 出现该错误的原因说明未安装Python2/3的支持 解决方法 使用包管理器安装Neovim的Python支持python-neovim ...
- CF1107
我哭了......什么鬼题我怎么都不会...果然教育场是教我做人的... 打的虚拟赛,286名...太菜了.EF都是可做题我都没写出来...G题大水题我居然没看... B:设g(i) = i的各位数字 ...
- 【POJ2676】sudoku 搜索
按照每一行每一列去填数,当填到每一行的第9列时,开始填下一行. 代码如下: #include <cstdio> #include <algorithm> #include &l ...
- (转)轻松学,Java 中的代理模式及动态代理
背景:讲到反射机制,肯定会想到动态代理. 轻松学,Java 中的代理模式及动态代理 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强.值得注意的是,代理类和被代理类应该 ...
- 2018-2019 ACM-ICPC, Asia Nanjing Regional Contest
https://codeforces.com/gym/101981 Problem A. Adrien and Austin 贪心,注意细节 f[x]=1:先手必赢. f[x]: 分成两部分(或一部分 ...
- redis设置最大内存
- firfox中"content-disposition", "attachment;filename=“+filename不能显示文件名字
一般要在浏览器中显示文件名,可以使用以下文件名 // 设置文件名的编码方式,使得文件的名字能够正常安全的显示. filename = URLEncoder.encode(filename, " ...