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写入值,阻塞解除,调用函数。