. golang定时的区别

第一种——

1timer := time.NewTimer(time.Time)
复制代码

第二种——

1ticker := time.NewTicker(time.Time)
复制代码
  • ticker和timer定时器两者都有Stop()方法,但timer定时器多一个Reset()方法
  • timer定时器默认情况下只执行一次,若要再次执行则调用Reset()方法,ticker定时器则默认执行多次

. 定时执行任务

第一种——

1// ticker写法
2ticker := time.NewTicker(time.hour) //定时一个小时
3defer ticker.Stop()
4for {
5    <- ticker.C
6    fmt.Println(time.Now())
7}
复制代码

第二种——

1// timer写法
2timer := time.NewTimer(time.Second)
3defer timer.Stop()
4for {
5    <- timer.C
6    fmt.Println("timout...")
7    // reset
8    timer.Reset(time.Second)
9}
复制代码

. 定点执行任务

即指定每天某个时间点执行任务

 1func startTimer(f func()) {
 2    t := time.NewTimer(Hour)
 3    for {
 4        f()
 5        now := time.Now()
 6        // 计算下一个零点
 7        next := now.Add(time.Hour * 24)
 8        next = time.Date(next.Yeadr(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location(next.Sub(now))
 9
10        t.Reset(next)
11        <-t.C
12    }
13}
复制代码

. 定时器的作用

用来离线跑脚本任务