Re:Channels, Concurrency, Cores: A New Concurrent ML Impleme...
by cdoxsey on Monday October 15, 2018 @03:38PM
(#18222970)
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:]...)
}
}
You can also use reflect: https://golang.org/pkg/reflect/#Select