Go by Example - IT: Ticker

I 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

Prossimo esempio: Worker Pool.