這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
使用golang的timer
定時任務
func demo(input chan interface{}) { t1 := time.NewTimer(time.Second * 5) t2 := time.NewTimer(time.Second * 10) for { select { case msg <- input: println(msg) case <-t1.C: println("5s timer") t1.Reset(time.Second * 5) case <-t2.C: println("10s timer") t2.Reset(time.Second * 10) } }}
斷續器
func main(){ ticker := time.NewTicker(time.Second) for t := range ticker.C { fmt.Println("ticker", t) }}
逾時
func main(){ ch1 := make(chan int, 1) ch2 := make(chan int, 1) select { case e1 := <-ch1: //如果ch1通道成功讀取資料,則執行該case處理語句 fmt.Printf("1th case is selected. e1=%v",e1) case e2 := <-ch2: //如果ch2通道成功讀取資料,則執行該case處理語句 fmt.Printf("2th case is selected. e2=%v",e2) case <- time.After(2 * time.Second): fmt.Println("Timed out") }}
自訂定時器
func main(){ var t *time.Timer f := func(){ fmt.Printf("Expiration time : %v.\n", time.Now()) fmt.Printf("C`s len: %d\n", len(t.C)) } t = time.AfterFunc(1*time.Second, f) //讓當前Goroutine 睡眠2s,確保大於內容的完整 //這樣做原因是,time.AfterFunc的調用不會被阻塞。它會以一部的方式在到期事件來臨執行我們自訂函數f。 time.Sleep(2 * time.Second)}
個人部落格:http://notes.xbug.site