go 定时任务timer和定时间隔任务ticker的使用
Timer类型代表单次时间事件。当Timer到期时,当时的时间会被发送给C
Ticker类型代表多次时间事件。
func main() { log.Println(time.Now()) t2 := time.NewTimer(time.Millisecond * 3000) <-t2.C log.Println(time.Now()) }
func main() { for range time.Tick(time.Second * 1) { log.Println(time.Now()) } }
使用timer实现随机间隔事件
package main import ( "log" "math/rand" "time" ) func main() { t := time.NewTimer(time.Millisecond * 1000) for { <-t.C n := 2 + rand.Intn(3) log.Println(n) log.Println(time.Now()) t.Reset(time.Duration(n) * time.Second) } }
package main import ( "log" "strconv" "time" ) func main() { log.Println("开始...") timer := time.NewTimer(time.Millisecond * 2000) for i := 1; ; i++ { <-timer.C log.Println("Ticker..." + strconv.Itoa(i) + "...") if i >= 5 { // 需要重置Reset 使t重新开始计时 timer.Reset(time.Second * 3) } else { timer.Reset(time.Millisecond * 1000) } if i >= 10 { timer.Stop() break } } }
2022/06/04 09:24:50 开始... 2022/06/04 09:24:53 Ticker...1... 2022/06/04 09:24:54 Ticker...2... 2022/06/04 09:24:55 Ticker...3... 2022/06/04 09:24:56 Ticker...4... 2022/06/04 09:24:57 Ticker...5... 2022/06/04 09:25:00 Ticker...6... 2022/06/04 09:25:03 Ticker...7... 2022/06/04 09:25:06 Ticker...8... 2022/06/04 09:25:09 Ticker...9... 2022/06/04 09:25:12 Ticker...10...