Ticker
#
// I [timer](timer) possono essere utilizzati
// quando è necessario effettuare qualcosa nel futuro
// nel futuro _solo una volta_. I _ticker_, d'altra parte,
// possono essere utilizzati quando è necessario svolgere
// un'azione qualcosa ripetutamente a intervalli regolari.
// Di seguito un esempio di un ticker che "ticchetta"
// periodicamente finché non lo fermiamo.
package main
import "time"
import "fmt"
func main() {
// I ticker usano, come i timer, dei channel per
// notificare che il tempo è scaduto. Di seguito
// useremo un `range` su un canale per iterare
// sui valori, che arriveranno ogni 500
// millisecondi.
ticker := time.NewTicker(time.Millisecond * 500)
go func() {
for t := range ticker.C {
fmt.Println("Tick", t)
}
}()
// I ticker possono essere fermati. Una volta che un
// ticker è fermato non invierà più alcun valore
// sul suo canale. Fermeremo il nostro ticker dopo
// 1600ms.
time.Sleep(time.Millisecond * 1600)
ticker.Stop()
fmt.Println("Ticker fermato")
}
# Quando eseguiamo questo programma il ticker dovrebbe
# tichettare 3 volte prima che lo fermiamo.
$ go run tickers.go
Tick 2012-09-23 11:29:56.487625 -0700 PDT
Tick 2012-09-23 11:29:56.988063 -0700 PDT
Tick 2012-09-23 11:29:57.488076 -0700 PDT
Ticker fermato