go 的 time ticker 設置定時器


上示例

package main

import (
    //    "bytes"
    //    "encoding/json"
    "fmt"
    //    "os"
    //    "gopkg.in/mgo.v2"
    //    "gopkg.in/mgo.v2/bson"
    //    "io/ioutil"
    //    "net/http"
    //    "strings"
    //    "net/url"
    "time"
)

func main() {
    ticker := time.NewTicker(10 * time.Second)
    for i := 0; i < 10; i++ {
        time := <-ticker.C
        fmt.Println(time.String())
    }
}

執行結果

wifimac:webdemo cdpmac$  go run src/server/timetest.go 

2015-08-24 16:22:23.590564088 +0800 CST

2015-08-24 16:22:33.591194618 +0800 CST

2015-08-24 16:22:43.587720967 +0800 CST

2015-08-24 16:22:53.590231413 +0800 CST

2015-08-24 16:23:03.591164202 +0800 CST

....

懂的已經不用往下看了。

 

找不到現成的資料。

看官方包的示例test代碼

看go的time部分源碼 Ticker結構 

 

type Ticker struct {

C <-chan Time // The channel on which the ticks are delivered.

r runtimeTimer

}

Time也類似

有一個只讀的chanel


go的time和ticket的調用

或者叫timmer internal和其他語言的開發思路不一樣。

其他語言,多是注冊回調函數,定時,時間到了調用回調。

go是 通過 chan

的阻塞實現的。

調用的地方,讀取chan 

定時,時間到,向chan寫入值,阻塞解除,調用函數。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM