Go за Прикладом: Діапазон (Range) з Каналами

Work in Progress / Сайт в процесі розробки

В попередньому прикладі ми дізнались як 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
one
two

Наступний приклад: Хронометри (Timers).