Go從入門到精通——示例:使用通道響應計時器的事件
阿新 • • 發佈:2022-05-11
示例:使用通道響應計時器的事件
Go語言中的 time 包提供了計時器的封裝。
由於 Go 語言中的通道和 goroutine 的設計,定時任務可以在 goroutine 中通過同步的方式完成,也可以通過 goroutine 中非同步回撥完成。
1、一段時間之後(time.After)
package main import ( "fmt" "time" ) func main() { //宣告一個退出用的通道 exit := make(chan int) //列印開始 fmt.Println("Start") //過1秒後,呼叫匿名函式 //AfterFunc()函式用於等待經過的時間,此後,它將在其自己的go-routine中呼叫已定義的函式“func()” time.AfterFunc(time.Second, func() { // Printed after stated duration // by AfterFunc() method is over fmt.Println("1 seconds over....") //通知 main() 的 goroutine 已經結束 exit <- 0 }) //等待結束 <-exit }
2、定點計時
計時器(Timer)的原理和倒計時鬧鐘類似,都是給定多少時間後出發。打點器(Ticker)的原理和鐘錶類似,鐘錶每到整點就會觸發。這兩種方法建立後會返回 time.Ticker 物件和 time.Timer 物件,裡面通過一個 C 成員,型別是隻能接收的時間通道(<-chan Time),使用這個通道就可以獲得時間觸發的通知。
下面程式碼建立一個打點器,每 500 毫秒觸發一起;建立一個計時器,2秒後觸發,只觸發一次。