如果我有一个函数,它的一些只读渠道(例如用于信道集合),我为什么不能打电话与渠道的片这个功能,如如何将通道切片作为可变参数传递给函数?
package main
func f(in ...<-chan int) {
// do something
}
func main() {
chList := []chan int{make(chan int), make(chan int)}
f(make(chan int), make(chan int)) // works
f(chList...) // cannot use chList (type []chan int) as type []<-chan int in argument to f
}
看来我错过了一些基本的东西,但我无法弄清楚什么。如果该功能不能使用单向通道,为什么在第一种情况下不能使用它?
这就是类型系统的工作原理。 'make(chan ...)'使有点“无向”(不是双向的,无向的)频道可分配给定向频道,而“chList”是一个双向频道片段,不可分配给只接收频道。你可以做'chList:= [] < - chan int {make(chan int),make(chan int)}'。 – Volker