ticker
通过 time.NewTicker() 创建,这种类型 ticker 会不断的按照设定的间隔时间触发,除非主动终止运行。
ticker := time.NewTicker(time.Second * 1) // 运行时长for range ticker.C {fmt.Printf("ticker")}
ticker := time.NewTicker(time.Second * 1) // 运行时长ch := make(chan int)go func() {var x intfor x < 10 {select {case <-ticker.C:x++fmt.Printf("%d\n", x)}}ticker.Stop()ch <- 0}()<-ch // 通过通道阻塞,让任务可以执行完指定的次数。
timer
通过 time.NewTimer() 创建,这种类型,timer只会执行一次,当然,可以在执行完以后通过用 timer.Reset() 让定时器再次工作,并可以更改时间间隔。
tt := time.NewTimer(time.Second * 10)<-tt.C
timer := time.NewTimer(time.Second * 1) // timer 只能按时触发一次,可通过Reset()重置后继续触发。go func() {var x intfor {select {case <-timer.C:x++fmt.Printf("%d,%s\n", x, time.Now().Format("2006-01-02 15:04:05"))if x < 10 {timer.Reset(time.Second * 2)} else {ch <- x}}}}()<-ch
After
After()其实是timer的一个语法糖。
// 同步<-time.After(time.Second * 4)// 异步time.AfterFunc(time.Second, func() {fmt.Println("timer exit")})
