cron 这个包,它实现了 cron 规范解析器和任务运行器

Cron 特殊字符

  1. 星号 ( * )
    • 星号表示将匹配字段的所有值
  2. 斜线 ( / )
    • 斜线用户 描述范围的增量,表现为 “N-MAX/x”,first-last/x 的形式,例如 3-59/15 表示此时的第三分钟和此后的每 15 分钟,到59分钟为止。即从 N 开始,使用增量直到该特定范围结束。它不会重复
  3. 逗号 ( , )
    • 逗号用于分隔列表中的项目。例如,在 Day of week 使用“MON,WED,FRI”将意味着星期一,星期三和星期五
  4. 连字符 ( - )
    • 连字符用于定义范围。例如,9 - 17 表示从上午 9 点到下午 5 点的每个小时
  5. 问号 ( ? )
    • 不指定值,用于代替 “ * ”,类似 “ _ ” 的存在,不难理解

预定义的 Cron 时间表

输入 简述 相当于
@yearly (or @annually) 1月1日午夜运行一次 0 0 0 1 1 *
@monthly 每个月的午夜,每个月的第一个月运行一次 0 0 0 1
@weekly 每周一次,周日午夜运行一次 0 0 0 0
@daily (or @midnight) 每天午夜运行一次 0 0 0 *
@hourly 每小时运行一次 0 0
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func main() {
  7. f2()
  8. }
  9. func f1() {
  10. // 1.timer基本使用
  11. timer1 := time.NewTimer(2 * time.Second)
  12. t1 := time.Now()
  13. fmt.Printf("t1---------------------------------------:%v\n", t1)
  14. t2 := <-timer1.C
  15. fmt.Printf("t2---------------------:%v\n", t2)
  16. }
  17. func f2() {
  18. // 2.验证timer只能响应1次
  19. timer2 := time.NewTimer(time.Second)
  20. for {
  21. <-timer2.C
  22. fmt.Println("时间到")
  23. }
  24. }
  25. func f3() {
  26. // 3.timer实现延时的功能
  27. time.Sleep(time.Second)
  28. timer3 := time.NewTimer(2 * time.Second)
  29. <-timer3.C
  30. fmt.Println("2秒到")
  31. <-time.After(2 * time.Second)
  32. fmt.Println("2秒到")
  33. }
  34. func f4() {
  35. // 4.停止定时器
  36. timer4 := time.NewTimer(2 * time.Second)
  37. go func() {
  38. <-timer4.C
  39. fmt.Println("定时器执行了")
  40. }()
  41. b := timer4.Stop()
  42. if b {
  43. fmt.Println("timer4已经关闭")
  44. }
  45. }
  46. func f5() {
  47. //// 5.重置定时器
  48. timer5 := time.NewTimer(3 * time.Second)
  49. timer5.Reset(1 * time.Second)
  50. fmt.Println(time.Now())
  51. fmt.Println(<-timer5.C)
  52. }