Как выделить массив каналов - PullRequest
20 голосов
/ 23 мая 2010

Как создать массив каналов ?

Например: заменить следующие пять строк массивом каналов размером 5:

var c0 chan int = make(chan int);
var c1 chan int = make(chan int);
var c2 chan int = make(chan int);
var c3 chan int = make(chan int);
var c4 chan int = make(chan int);

Ответы [ 2 ]

50 голосов
/ 02 июня 2010

Оператор var chans [5]chan int выделит массив размера 5, но все каналы будут nil.

Один из способов - использовать литерал фрагмента:

var chans = []chan int {
   make(chan int),
   make(chan int),
   make(chan int),
   make(chan int),
   make(chan int),
}

Если вы не хотите повторяться, вам придется повторить его и инициализировать каждый элемент:

var chans [5]chan int
for i := range chans {
   chans[i] = make(chan int)
}
0 голосов
/ 10 мая 2018

Я думаю, что вы можете использовать буферизованные каналы в этом случае.

Каналы могут быть буферизованы. Укажите длину буфера в качестве второго аргумента для инициализации буферизованного канала:

ch := make(chan int, 5)

Отправляет в буферный блок канала только тогда, когда буфер заполнен. Получает блок, когда буфер пуст.

https://tour.golang.org/concurrency/3

...