32-timers

//  我们通常需要在未来的某些时间点执行Go代码或者在某个时间段内重复
//  Golang内置了timer(计时器)和ticker(断续器),使得上述目的很容易实现

package main

import (
	"fmt"
	"time"
)

func main() {
	// Timer代表未来的某个时间
	timer1 := time.NewTimer(2 * time.Second) //告诉timer等待的时长,然后提供一个时间到达后进行通知的通道
	<-timer1.C                               // timer的通道C被<-timer1.C阻塞,直到通道内被传入一个表示时间到期的值
	fmt.Println("Timer 1 expired")

	//  如果只是想要等待,可以使用time.Sleep
	//  使用Timer的好处是,可以在时间过期之前取消它
	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将在程序运行2秒后过期第二个Timer将会被停止而没有机会过期
上次修改: 10 January 2020