Range Over Channels

Перебор значений из каналов (Range over Channels)|Range over Channels #

// В [предыдущем](range) примере мы виделе как `for` и
// `range` позволяют перебирать базовые структуры. Мы
// так же можем использовать этот синтаксис для чтения
// значений из канала.

package main

import "fmt"

func main() {

	// Мы будем итерировать 2 значения в канале `queue`.
	queue := make(chan string, 2)
	queue <- "one"
	queue <- "two"
	close(queue)

	// Этот `range` будет перебирать каждый элемент
	// полученный из канала `queue`. Но т.к. мы `закрыли`
	// канал ранее, перебор элементов завершится после
	// получения двух элементов.
	for elem := range queue {
		fmt.Println(elem)
	}
}
$ go run range-over-channels.go
one
two

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