golang編程入門定時器

來源:互聯網
上載者:User

一、知識點

golang定時器使用的類庫是“time”,參考官方文檔建立timer。官方提供了兩種方式建立timer分別是:
1)func AfterFunc(d Duration, f func()) *Timer這方法大概意思是經過d時間間隔,就執行f函數。
2)func NewTimer(d Duration) *Timer這函數打個意思是建立一個timer每過去d時間間隔就發送目前時間到timer的channel裡面。
3)補充一點chan的知識點,channel(通道)是golang裡麵線程通訊的通道。它分為帶緩衝的通道和不帶緩衝的通道。chan也可以建立為只輸入通道或者唯讀入通道或者可讀可寫通道。舉例:
ch := make(chan int) 無緩衝通道(可讀可寫通道)
ch := make(chan int, 10)緩衝為10的通道(可讀可寫通道)
ch := make(chan<- int)無緩衝通道(唯寫通道)
ch := make(<-chan int)無緩衝通道(唯讀通道)

二、實踐

繼續上一篇請求天氣的demo。我們每隔十分鐘定時擷取一下最新天氣。
建立timer執行時間是間隔10分鐘:

timer := time.NewTicker(10* time.Minute)for {      <-timer.C      rlt, err := doHttpGetRequest("https://restapi.amap.com/v3/weather/weatherInfo?key=你的高德key&city=110101")    if err != nil {        fmt.Println("net req error")    } else {        fmt.Println(rlt)    }}

在上面代碼中,有一行<-timer.C這句話說明下,首先我們看下timer的資料結構如下:

type Timer struct {    C <-chan Time    // contains filtered or unexported fields}

timer中有一個只可寫入的通道C變數。我們使用的是func NewTimer(d Duration) *Timer函數來建立timer。那麼我們這個timer就是每十分鐘中向這個通道C中寫入目前時間。我們在代碼中的這行<-timer.C只是為了把通道C的值進行讀出操作。防止線程阻塞,timer無法正常運行。
PS:關於chan更詳細的介紹參考

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.