Go podle Příkladů: Opakující časovače (tickers)

Časovače jsou pro situace kdy chcete něco udělat jednou v budoucnu - opakující časovače tickers jsou pro situace kdy chcete něco provádět opakovaně v pravidelném interalu. Tady je příkad opakujícího se časovače který tiká periodicky dokud ho nezastavíme.

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

Opakující časovače používají podobný mechanismus jako běžné časovače: kanál kterému je posílaná hodnota. Zde použijeme zabudovaný příkaz range pro iterování přes hodnoty které do kanálu přijdou každých 500ms.

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

Opakující časovače je možné stejně jako běžné časovače zastavit. Jakmile je časovač zastavený už nedostane do kanálu žádnou další hodnotu. Náš zastavíme po 1600ms.

    time.Sleep(1600 * time.Millisecond)
    ticker.Stop()
    fmt.Println("Ticker zastaven")
}

Když spustíme tento program, časovač by měl tiknout 3 krát předtím, než ho zastavíme.

$ go run tickers.go
Tik v 2009-11-10 23:00:00.5 +0000 UTC m=+0.500000001
Tik v 2009-11-10 23:00:01 +0000 UTC m=+1.000000001
Tik v 2009-11-10 23:00:01.5 +0000 UTC m=+1.500000001
Ticker zastaven

Další příklad: Zásobníky pracovních rutin (worker pools).