Go by Example: Range over Channels

En un ejemplo anterior vimos cómo for y range proporcionan iteración sobre estructuras de datos básicas. También podemos usar esta sintaxis para iterar sobre valores recibidos de un canal.

package main
import "fmt"
func main() {

Iteraremos sobre 2 valores en el canal queue.

    queue := make(chan string, 2)
    queue <- "one"
    queue <- "two"
    close(queue)

Este range itera sobre cada elemento a medida que se recibe de queue. Debido a que cerramos el canal anteriormente, la iteración termina después de recibir los 2 elementos.

    for elem := range queue {
        fmt.Println(elem)
    }
}
$ go run range-over-channels.go
one
two

Este ejemplo también mostró que es posible cerrar un canal no vacío pero aún así tener los valores restantes recibidos.

Siguiente ejemplo: Timers.