Sto cercando di scrivere funzione come questa, ma non posso dichiarare fetta di canalicome posso dichiarare una fetta di Chan (canali) in func
func fanIn(set <-[]chan string) <-chan string {
c := make(chan string)
for i := range set {
go func() { for {c <-set[i]} }()
}
return c
}
è possibile in Vai di avere un una fetta di canali come argomento?
esempio di chiamata
set := [2]chan string{mylib.Boring("Joe"), mylib.Boring("Ann")}
c := fanIn(set)
se posso fare questo
func fanIn(input1, input2 <-chan string) <-chan string {
assumo che dovrebbe essere possibile avere fetta o array di "< stringa -chan"
aggiornato:
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.")
}
Si dovrebbe raramente restituire canali dalla propria API pubblica, invece di prendere un canale come argomento in cui si invia. Puoi usare questo singolo canale in tutte le tue chiamate noiose e non avrai nemmeno bisogno del fanIn. – Wessie
È anche possibile utilizzare https://godoc.org/github.com/eapache/channels#Multiplex che utilizza un 'select' per evitare di generare un'intera goroutine per ogni canale di input. – Evan