【发布时间】:2016-11-04 18:01:06
【问题描述】:
如果我有一个函数需要多个只读通道(例如用于通道聚合),为什么我不能用一个通道切片调用这个函数,比如
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)}。
标签: go