Ползваме срочници, когато искаме да извършим еднократно действие в бъдещето. Часовниците ги ползваме, за да извършваме многратно повтарящи се през определено време действия. Иначе казано, срочниците цъкват веднъж, а часовниците цъкат многократно. Ето пример за часовник, който цъка своевременно, докато го спрем.
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
Следващ пример: Работилници.