Range Over Channels

Діапазон (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
раз
два

# Цей приклад також демонструє здатність
# закривати не пустий канал і все ж
# отримувати з нього значення.