我正在尝试编写这样的函数,但我无法声明通道片段。
在Go中,是否可以将一个通道的切片作为参数传递?
调用示例:
我认为可以创建一个"<-chan string"的切片或数组。
更新:
func fanIn(set <-[]chan string) <-chan string {
c := make(chan string)
for i := range set {
go func() { for {c <-set[i]} }()
}
return c
}
在Go中,是否可以将一个通道的切片作为参数传递?
调用示例:
set := [2]chan string{mylib.Boring("Joe"), mylib.Boring("Ann")}
c := fanIn(set)
如果我能做到这一点
func fanIn(input1, input2 <-chan string) <-chan string {
我认为可以创建一个"<-chan string"的切片或数组。
更新:
func fanIn(set []<-chan string) <-chan string {
c := make(chan string)
for i := range set {
go func() {
for {
x := <-set[i]
c <- x
}
}()
}
return c
}
func main() {
set := []<-chan string{mylib.Boring("Joe"), mylib.Boring("Ann"), mylib.Boring("Max")}
c := fanIn(set)
for i := 0; i < 10; i++ {
fmt.Println(<-c)
}
fmt.Println("You're boring: I'm leaving.")
}
select
来避免为每个输入通道生成整个 goroutine。 - Evan