É possível multiplexar vários canais em um?

A idéia é ter um número variável de canais em uma fatia, empurrar cada valor recebido através deles em um único canal e fechar esse canal de saída quando o último dos canais de entrada for fechado. Algo parecido com isto, mas para vários canais mais de dois:

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
        }
    }
}

O código acima evita o looping ocupado, pois não hádefault caso, o que é bom (EDIT: parece que a presença de ", ok" faz o select declaração non-blocking e o loop está ocupado depois de tudo. Mas, por causa do exemplo, pense no código como se fosse bloquear ). O mesmo tipo de funcionalidade também poderia ser alcançado com um número arbitrário de canais de entrada? Obviamente, isso poderia ser feito reduzindo-se a fatia a um único canal, mas eu estaria mais interessado em uma solução mais simples, se possível.

questionAnswers(3)

yourAnswerToTheQuestion