我想写这样的函数声明CHAN(通道)的片,但我不能申报渠道的片我怎么能在FUNC
func fanIn(set <-[]chan string) <-chan string {
c := make(chan string)
for i := range set {
go func() { for {c <-set[i]} }()
}
return c
}
是否有可能在进入有一小部分渠道作为参数?
呼叫
set := [2]chan string{mylib.Boring("Joe"), mylib.Boring("Ann")}
c := fanIn(set)
的例子,如果我能做到这一点
func fanIn(input1, input2 <-chan string) <-chan string {
我认为它应该是可能有 “< -chan字符串”
的片或阵列已更新:
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.")
}
你应该很少从你的公共API返回频道,而是把一个频道作为你发送的参数。您可以在所有Boring调用中使用此单个频道,甚至不需要fanIn。 – Wessie 2014-10-10 13:19:51
你也可以使用https://godoc.org/github.com/eapache/channels#Multiplex,它使用'select'来避免产生每个输入通道的整个goroutine。 – Evan 2014-10-10 14:56:01