Go в примерах: Счётчики тиков (Tickers)

Таймеры применяются, когда нужно сделать что-то один раз в будущем - tickers тогда, когда нужно делать что-то повторно с постоянным интервалом. Здесь пример счетчика тиков, который периодически тикает до тех пор, пока мы его не остановим.

package main
import "time"
import "fmt"
func main() {

Счетчик тиков использует механизм, похожий на таймер: канал, который отправляет значения. Здесь мы используем range, встроенный в канал для перебора значений, поступающих каждые 500 мсек.

    ticker := time.NewTicker(time.Millisecond * 500)
    go func() {
        for t := range ticker.C {
            fmt.Println("Tick at", t)
        }
    }()

Счетчики тиков могут быть остановлены подобно таймерам. Как только счетчик будет остановлен, больше не будет получать значения в канале. Остановим его после 1500 мсек.

    time.Sleep(time.Millisecond * 1500)
    ticker.Stop()
    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

Следующий пример: Набор обработчиков (Worker Pools).