1. NewTimer
package main import ( "time" "fmt" ) func main() { /* 1. func NewTimer(d Duration) *Timer 创建一个计时器,d时间以后触发 */ timer := time.NewTimer(3 *time.Second) //3秒 fmt.Printf("%T ",timer) //*time.Timer fmt.Println(time.Now()) //2019-08-15 11:32:17.065452 +0800 CST m=+0.000614404 //此处等待channel中的数值,会阻塞3秒 ch2 := timer.C //3秒之后的时间 fmt.Println(<-ch2 ) //2019-08-15 11:32:20.068101 +0800 CST m=+3.003327715 //新建一个计时器 timer2 := time.NewTimer(5*time.Second) //开始goroutine,来处理触发后的事件 go func() { <- timer2.C //5秒之后打印下面的 fmt.Println("Timer 2 结束了。。。开始。。。。") }() //取消计时器 time.Sleep(3*time.Second) flag := timer2.Stop() if flag{ fmt.Println("Timer 2 停止了。。。") } }
2. After
package main import ( "time" "fmt" ) func main() { /* 2. func After(d Duration) <-chan Time 返回一个通道:chan,存储的是d时间间隔之后的当前时间 相当于:return NewTimer(d).C */ ch := time.After(3 *time.Second) fmt.Printf("%T ",ch) //<-chan time.Time fmt.Println(time.Now()) //2019-08-15 11:43:33.941039 +0800 CST m=+0.000537462 time2 := <-ch fmt.Println(time2) //2019-08-15 11:43:36.945775 +0800 CST m=+3.005338577 }