Timers
#
// On veut souvent exécuter du code Go à un certain
// point du futur, ou de manière répétée selon un
// intervalle de temps. Les fonctionnalités builtin
// _timer_ et _ticker_ rendent ces deux tâches faciles.
// Nous allons d'abord regarder les timers, et ensuite
// les [tickers](tickers).
package main
import "time"
import "fmt"
func main() {
// Les timers représente un événement unique dans le
// futur. On précise combien de temps on veut
// attendre, et il founit un canal qui sera notifié
// à ce moment là. Ce timer attendra 2 secondes.
timer1 := time.NewTimer(time.Second * 2)
// Le `<-timer1.C` bloque sur le canal `C` du timer
// jusqu'à ce qu'il envoie une valeur indiquant que
// le timer a expiré.
<-timer1.C
fmt.Println("Timer 1 expired")
// Pour simplement attendre, on peut utiliser
// `time.Sleep`. Mais les timers peuvent être utiles
// car on peut les stopper avant qu'ils expirent.
// Voici un exemple de ceci.
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 expired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}
# Le premier timer va expirer ~2s après que l'on démarre
# le programme, mais le second devrait être stoppé avant
# qu'il ait pu expirer.
$ go run timers.go
Timer 1 expired
Timer 2 stopped