cron 这个包,它实现了 cron 规范解析器和任务运行器
Cron 特殊字符
- 星号 ( * )
- 星号表示将匹配字段的所有值
- 斜线 ( / )
- 斜线用户 描述范围的增量,表现为 “N-MAX/x”,first-last/x 的形式,例如 3-59/15 表示此时的第三分钟和此后的每 15 分钟,到59分钟为止。即从 N 开始,使用增量直到该特定范围结束。它不会重复
- 逗号 ( , )
- 逗号用于分隔列表中的项目。例如,在 Day of week 使用“MON,WED,FRI”将意味着星期一,星期三和星期五
- 连字符 ( - )
- 连字符用于定义范围。例如,9 - 17 表示从上午 9 点到下午 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 |
package main
import (
"fmt"
"time"
)
func main() {
f2()
}
func f1() {
// 1.timer基本使用
timer1 := time.NewTimer(2 * time.Second)
t1 := time.Now()
fmt.Printf("t1---------------------------------------:%v\n", t1)
t2 := <-timer1.C
fmt.Printf("t2---------------------:%v\n", t2)
}
func f2() {
// 2.验证timer只能响应1次
timer2 := time.NewTimer(time.Second)
for {
<-timer2.C
fmt.Println("时间到")
}
}
func f3() {
// 3.timer实现延时的功能
time.Sleep(time.Second)
timer3 := time.NewTimer(2 * time.Second)
<-timer3.C
fmt.Println("2秒到")
<-time.After(2 * time.Second)
fmt.Println("2秒到")
}
func f4() {
// 4.停止定时器
timer4 := time.NewTimer(2 * time.Second)
go func() {
<-timer4.C
fmt.Println("定时器执行了")
}()
b := timer4.Stop()
if b {
fmt.Println("timer4已经关闭")
}
}
func f5() {
//// 5.重置定时器
timer5 := time.NewTimer(3 * time.Second)
timer5.Reset(1 * time.Second)
fmt.Println(time.Now())
fmt.Println(<-timer5.C)
}