time.Timer
Timer 是一个定时器。代表未来的一个单一事件,你可以告诉timer你要等待多长时间。
type Timer struct { C <-chan Time r runtimeTimer }
它提供一个channel,在定时时间到达之前,没有数据写入timer.C 会一直阻塞。直到定时时间到,系统会自动向 timer.C 这个channel 中写入当前事件,阻塞即被解除。
代码示例:
func main() { fmt.Println("当前时间:", time.Now()) // 创建定时器 myTimer := time.NewTimer(time.Second * 2) nowTime := <-myTimer.C fmt.Println("现下时间:", nowTime) }
3种定时方法
// 3种定时方法 func main() { fmt.Println("当前时间:", time.Now()) // 1. sleep time.Sleep(time.Second * 1) // 2 Timer.C myTimer := time.NewTimer(time.Second * 2) nowTime := <-myTimer.C fmt.Println("现下时间:", nowTime) // 3. time.After nowTime = <-time.After(time.Second * 2) fmt.Println("现下时间:", nowTime) }
定时器的重置与停止
func main() { // 创建定时器 myTimer := time.NewTimer(time.Second * 10) // 重置定时时长为1 myTimer.Reset(1 * time.Second) go func() { <-myTimer.C fmt.Println("子go程定时完毕") }() // 设置定时器终止 //myTimer.Stop() for { ; } }
定时器周期定时
func main() { fmt.Println("now:", time.Now()) myTicker := time.NewTicker(time.Second) go func() { for { nowTime := <-myTicker.C fmt.Println("nowTime:", nowTime) } }() for { } }