package main import ( "fmt" "time" ) func main() { //創建定時器,2秒后獲取 timer := time.NewTimer(time.Second * 2) //獲取當前時間 t1 := time.Now() //接收通道數據 t2 := <-timer.C fmt.Println(t1) fmt.Println(t2) //結果為(相差兩秒): /* 2019-07-04 13:59:33.7200299 +0800 CST m=+0.022983601 2019-07-04 13:59:35.7206204 +0800 CST m=+2.023574101 */ timer2 := time.NewTimer(time.Second * 10) //重置定時器 timer2.Reset(time.Second * 3) //獲取當前時間 t3 := time.Now() fmt.Println(t3) t4 := <-timer2.C //停止定時器 timer2.Stop() fmt.Println(t4) //定時執行一個函數 timer3 := time.AfterFunc(time.Second*2, func() { fmt.Println("2秒函數執行了") }) timer3.Reset(time.Second * 2) //延遲主協程的結束 time.Sleep(time.Second * 3) }
相關函數列表:
NewTimer()創建一個Timer,它會在最少過去時間段d后到期,向其自身的C字段發送當時的時間
AfterFunc()另起一個go程等待時間段d過去,然后調用f。它返回一個Timer,可以通過調用其Stop方法來取消等待和對f的調用。
Reset()使t重新開始計時,(本方法返回后再)等待時間段d過去后到期。如果調用時t還在等待中會返回真;如果t已經到期或者被停止了會返回假。
Stop()停止Timer的執行。如果停止了t會返回真;如果t已經被停止或者過期了會返回假。Stop不會關閉通道t.C,以避免從該通道的讀取不正確的成功。