我想寫這樣的函數聲明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