来源:https://github.com/xg-wang/gobyexample/tree/master/examples
//我们需要在将来一个时刻运行 Go 代码,或者在某段时间间隔内重复运行。 Go 的内置 _定时器_和_打点器_特性很容易实现
package main
import (
"fmt"
"time"
)
func main() {
//定时器表示在未来某一时刻的独立事件。告诉定时器需要等待的时间
//,然后它将提供一个用于通知的通道
timer1 := time.NewTimer(time.Second * 4)
//`<-timer1.C`直到这个定时器的通道`C` 明确的发送了定时器失效的值之前,将一直阻塞
<-timer1.C
fmt.Println("Timer 1 expired")
//如果是仅仅单纯的等待,需要使用`time.Sleep`
//定时器是有原因之一就是你可以在定时器失效之前,取消这个定时器
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 expired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}
输出结果:
Timer 1 expired
Timer 2 stopped