Діапазон (Range) з Каналами|Range over Channels
#
// В попередньому [прикладі](range) ми дізнались як `for` та
// `range` забезпечують ітерацію базових структур даних,
// але цей синтаксис можна використати і для отримання значень з каналу.
package main
import "fmt"
func main() {
// Ми створимо канал `queue` і надішлемо до нього два строкових значення,
// після чого ми закриємо його.
queue := make(chan string, 2)
queue <- "раз"
queue <- "два"
close(queue)
// Скориставшись `range` ми пройдемось по значеннях `queue`, a так як ми
// закрили цей канал - ітерація припиняється, після отримання
// усіх (2) елементів з нього.
for elem := range queue {
fmt.Println(elem)
}
}
$ go run range-over-channels.go
раз
два
# Цей приклад також демонструє здатність
# закривати не пустий канал і все ж
# отримувати з нього значення.