包获取

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定时任务包使用的更多相关文章

  1. golang的定时任务

    golang的定时任务使用的是cron这个包来解决的 官方文档地址:https://godoc.org/github.com/robfig/cron cron包的基础知识 字段名 是否必须 允许的值 ...

  2. Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫

    Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...

  3. 一键解决 go get golang.org/x 包失败

    问题描述 当我们使用 go get.go install.go mod 等命令时,会自动下载相应的包或依赖包.但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况. ...

  4. 19-03【golang】strings包

    golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串   Contains(s, substr stri ...

  5. 关于golang.org/x包问题

    关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...

  6. Golang Gin 项目包依赖管理 godep 使用

    Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...

  7. golang 关于golang.org/x包问题

    关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...

  8. Golang的json包

    encoding/json encoding/json是官方提供的标准json, 实现RFC 7159中定义的JSON编码和解码.使用的时候需要预定义struct,原理是通过reflection和in ...

  9. Golang官方log包详解

    Golang官方log包详解 以下全是代码, 详解在注释中, 请从头到尾看 // Copyright 2009 The Go Authors. All rights reserved. // Use ...

随机推荐

  1. 【BZOJ2095】【POI2010】Bridge 网络流

    题目大意 ​ 给你一个无向图,每条边的两个方向的边权可能不同.要求找出一条欧拉回路使得路径上的边权的最大值最小.无解输出"NIE". \(2\leq n\leq 1000,1\le ...

  2. 自定义chromium浏览器

    自定义chromium浏览器 来源  https://chaopeng.me/blog/2018/08/17/how-to-develop-full-homebrew-browser.html 最近有 ...

  3. 【Gym 100812C】Story of Princess (走完图所有边)

    BUPT2017 wintertraining(15) #7A 题意 给你一个图,n个点m条边,求走遍所有边,至少经过几次点,及输出依次经过的点.n and m (2 ≤ n ≤ 10^5, 1 ≤  ...

  4. DP及其优化

    常见DP模型及其构造 序列DP ARC074 RGB Sequence 题意 给你一个长度为 \(n\) 的序列和 \(m\) 组约束条件,每组条件形如 \(l_i,r_i,x_i\),表示序列上的 ...

  5. Codeforces Round #429 (Div. 1) C. On the Bench(dp + 组合数)

    题意 一个长度为 \(n\) 的序列 \(A\) ,定义一个 \(1\) 到 \(n\) 的排列 \(p\) 是合法的,当且仅当 \(\forall i \in [1, n − 1], A_{p_i} ...

  6. Docker部署Jenkins测试环境

    安装docker环境 yum install epel-release -y && yum install docker -y 如果是高手需要docker-compose的话就再装个d ...

  7. hdu 2609 How many(最小表示法)

    Problem Description Give you n ( n < 10000) necklaces ,the length of necklace will not large than ...

  8. kafka 流式计算

    http://www.infoq.com/cn/articles/kafka-analysis-part-7/ Kafka设计解析(七)- 流式计算的新贵 Kafka Stream

  9. js 获取 url 参数

    /** * 根据页面地址获取所有参数对象 * @return Object{} 返回所有参数 * ------------------------------ * 根据页面地址获取指定参数对象 * @ ...

  10. jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...