Go в примери: Часовници

Ползваме срочници, когато искаме да извършим еднократно действие в бъдещето. Часовниците ги ползваме, за да извършваме многратно повтарящи се през определено време действия. Иначе казано, срочниците цъкват веднъж, а часовниците цъкат многократно. Ето пример за часовник, който цъка своевременно, докато го спрем.

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

Часовниците работят подобно на срочниците – чрез канал, по който изпращат стойности. Сега ще използваме вграденото изявление select, за да очакваме стойности, които пристигат веднъж на всеки 500 милисекунди.

    часовник := time.NewTicker(500 * time.Millisecond)
    край := make(chan bool)
    go func() {
        for {
            select {
            case <-край:
                return
            case t := <-часовник.C:
                fmt.Println(
                    "Цък в", t.Format(`15:04:05.000`))
            }
        }
    }()

Часовниците могат да бъдат спирани също както срочниците. След като веднъж е спрян часовника, той няма повече да получава стойности по канала си. Нашия ще го спрем след 1600 милисекунди.

    time.Sleep(1600 * time.Millisecond)
    часовник.Stop()
    край <- true
    fmt.Println("Спряхме часовника в",
        time.Now().Format(`15:04:05.000`))
}

Когато пуснем тази програма, часовника ще цъкне три пъти преди да го спрем.

$ go run tickers.go
Цък в 13:35:01.620
Цък в 13:35:02.120
Цък в 13:35:02.620
Спряхме часовника в 13:35:02.721

Следващ пример: .