Go con Ejemplos: Tickers

Los temporizadores se usan cuando quieres hacer una cosa en el futuro - los tickers ( por aquello de tic tac ) - se usan cuando se quiere hacer algo repetidamente en intervalos regulares. Aquí hay un ejemplo de un ticker que hace tic periodicamente hasta que lo detenemos.

package main
import "time"
import "fmt"
func main() {

Los tickers usan un mecanismo similar a los temporizadores: un canal el que se le envían valores. Aquí vamos a usar el builtin range en el canal para iterar cada 500ms. los valores conforme van llegando.

    ticker := time.NewTicker(time.Millisecond * 500)
    go func() {
        for t := range ticker.C {
            fmt.Println("Tic a las", t)
        }
    }()

Los tickers pueden ser detenidos igual que los temporizadores. Una vez que un ticker es detenido ya no recibirá más valores en su canal. Detendremos el nuestro después de 1500ms.

    time.Sleep(time.Millisecond * 1500)
    ticker.Stop()
    fmt.Println("Ticker detenido")
}

Cuando corremos este programa, debe de hacer tic tres veces antes de que lo detengamos.

$ go run tickers.go
Tic a las 2014-06-03 23:32:57.180114752 -0500 CDT
Tic a las 2014-06-03 23:32:57.680578946 -0500 CDT
Tic a las 2014-06-03 23:32:58.180938733 -0500 CDT
Ticker detenido

Siguiente ejemplo: Pool de trabajadores.