私はチャンネルのスライスにこの関数を呼び出すことができない理由(チャネル集約のための例)読み取り専用のチャンネル数を、かかる機能を持っている場合は、チャンネルスライスを関数にバリデーションとして渡すにはどうすればよいですか?
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