如果我有一個函數,它的一些只讀渠道(例如用於信道集合),我爲什麼不能打電話與渠道的片這個功能,如如何將通道切片作爲可變參數傳遞給函數?
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