Go на примерах: Range по каналам

В предыдущем примере мы видели, как for и range обеспечивают итерацию по базовым структурам данных. Мы также можем использовать этот синтаксис для итерации по значениям, полученным из канала.

package main
import "fmt"
func main() {

Мы будем итерировать по 2 значениям в канале queue.

    queue := make(chan string, 2)
    queue <- "один"
    queue <- "два"
    close(queue)

Этот range итерирует по каждому элементу по мере его получения из queue. Поскольку мы закрыли канал выше, итерация завершится после получения 2 элементов.

    for elem := range queue {
        fmt.Println(elem)
    }
}
$ go run range-over-channels.go
один
два

Этот пример также показал, что можно закрыть непустой канал, и оставшиеся значения всё равно будут получены.

Далее: .