3 ms·
Here's one way: func fanin(out chan<- int, ins ...chan int) { switch len(ins) { case 0: case 1: for msg := range ins[0]
by cdoxsey 8y ago
Here's one way:
func fanin(out chan<- int, ins ...chan int) {
switch len(ins) {
case 0:
case 1:
for msg := range ins[0] {
out <- msg
}
case 2:
for {
var msg int
select {
case msg = <-ins[0]:
case msg = <-ins[1]:
}
out <- msg
}
default:
go fanin(out, ins[:len(ins)/2]...)
go fanin(out, ins[len(ins)/2:]...)
}
}
https://play.golang.org/p/9KNkheXHUBr https://play.golang.org/p/9KNkheXHUBr
You can also use reflect: https://golang.org/pkg/reflect/#Select https://golang.org/pkg/reflect/#Select