Go Em Exemplos: Range over Channels

Em um exemplo anterior foi apresentado como for e range podem iterar estruturas de dados básicas. Também é possível usar esta sintaxe para iterar sobre valores recebidos em um canal.

package main
import "fmt"
func main() {

Vamos iterar sobre 2 valores no canal fila.

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

Este range itera sobre cada um dos elementos na medida que são recebidos de fila. Como o canal é fechado, com close, a iteração finaliza depois de recebidos os dois elementos.

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

Este exemplo também demonstra que é possível fechar um canal não vazio, mas ainda ter disponíveis os valores restantes para serem recebidos.

Próximo exemplo: Timers.