タイマー は、未来に一度だけ何かしたいときに使いますが、 ティッカー (tickers) は定期的に何かしたいときに使います。 ここでは、停止するまで定期的に動作するティッカーの例を見ます。 |
|
package main |
|
import ( "fmt" "time" ) |
|
func main() { |
|
ティッカーは、タイマーと同様の仕組み、すなわち
値を送信するチャネルを使います。
ここでは、500ミリ秒ごとに受信される値を待つために、
|
ticker := time.NewTicker(500 * time.Millisecond) done := make(chan bool) |
go func() { for { select { case <-done: return case t := <-ticker.C: fmt.Println("Tick at", t) } } }() |
|
ティッカーは、タイマーと同じように停止できます。 ティッカーが停止されると、そのチャネルからはもう 値を受信しなくなります。 この例では、1600ミリ秒後に停止します。 |
time.Sleep(1600 * time.Millisecond) ticker.Stop() done <- true fmt.Println("Ticker stopped") } |
このプログラムを実行すると、ティッカーは停止されるまでに 3 回動作するはずです。 |
$ go run tickers.go Tick at 2012-09-23 11:29:56.487625 -0700 PDT Tick at 2012-09-23 11:29:56.988063 -0700 PDT Tick at 2012-09-23 11:29:57.488076 -0700 PDT Ticker stopped |
Next example: Worker Pools.