¿Es posible multiplexar varios canales en uno?

La idea es tener un número variable de canales en un segmento, empujar cada valor recibido a través de ellos en un solo canal y cerrar este canal de salida una vez que se cierre el último de los canales de entrada. Algo así, pero para un número de canales más de dos:

func multiplex(cin1, cin2, cout chan int) {
    n := 2
    for {
        select {
        case v, ok := <-cin1:
            if ok {
                cout <- v
            } else {
                n -= 1
            }

        case v, ok := <-cin2:
            if ok {
                cout <- v
            } else {
                n -= 1
            }
        }

        if n == 0 {
            close(cout)
            break
        }
    }
}

El código anterior evita los bucles ocupados ya que no haydefault caso, lo cual es bueno (EDITAR: parece que la presencia de ", ok" hace que la instrucción de selección no se bloquee y el bucle está ocupado después de todo. Pero por el ejemplo, piense en el código como si se bloqueara ). ¿Se podría lograr el mismo tipo de funcionalidad con un número arbitrario de canales de entrada? Obviamente, esto se podría hacer reduciendo la porción por pares a un solo canal, pero me interesaría más en una solución más simple, si es posible.

Respuestas a la pregunta(3)

Su respuesta a la pregunta