Go gestisce il tempo tramite gli oggetti timer e tick. Il timer rappresenta un evento che si verifica una sola volta e si manifesta tramite l’invio di un dato su un channel ad esso associato.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(time.Second * 2) go func() { <-timer.C fmt.Println("Passati 2 secondi") }() time.Sleep(time.Second * 5) } |
Nell’esempio ho definito un timer che scatta dopo 2 secondi e una goroutine che allo scadere del timer darà evidenza a video del tempo trascorso. La goroutine aspetta il valore inviato sul channel, attributo dell’oggetto timer. Questo meccanismo ci permette di impostare agevolmente dei timeout nel nostro codice. Tramite la funzione Stop del timer possiamo evitare la sua attivazione.
1 2 3 |
go func() { timer.Stop() }() |
Qualora si voglia effettuare delle operazioni ad intervalli regolari Go mette a disposizione l’oggetto Ticker
1 2 3 4 5 6 7 8 9 |
ticker := time.NewTicker(time.Second * 1) go func() { for t := range ticker.C { fmt.Println("Ticker", t.Second()) if t.Second() == 10 { ticker.Stop() } } }() |
Nell’esempio ho creato un oggetto che inserisce un messaggio nel channel a intervalli regolari di un secondo. Anche il ticker presente una funzione Stop che consente di interrompere l’esecuzione del ticker.