Одна горутина с select по нескольким входным каналам читает первый пришедший элемент и пишет в один выходной канал. Все входы в итоге нужно прочитать до конца и закрыть выход после завершения всех.
for ch1 != nil || ch2 != nil {
select {
case v, ok := <-ch1: if !ok { ch1 = nil }; else { out <- v }
case v, ok := <-ch2: if !ok { ch2 = nil }; else { out <- v }
}
}
close(out)