Arrays 如何分配一组通道

Arrays 如何分配一组通道,arrays,go,channel,Arrays,Go,Channel,如何创建通道阵列 例如:用大小为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); 语句var chans[5]chan int将分配一个大小为5的数组,但所有通道都将nil 一种方

如何创建通道阵列

例如:用大小为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);

语句
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)
}

我认为在这种情况下可以使用缓冲通道

通道可以缓冲。提供缓冲区长度作为初始化缓冲通道的第二个参数:

ch := make(chan int, 5)
仅当缓冲区已满时才发送到缓冲通道块。当缓冲区为空时接收块


为什么您的解决方案比Chickencha简洁而惯用的
chans:=make([]chan int,5)
更好?如果通道没有显式地分配
make(chan int)
,它们将默认为
nil
。可以按照您的顺序填充数组,缓冲通道就不同了