Czy można multipleksować kilka kanałów w jeden?

Chodzi o to, aby mieć zmienną liczbę kanałów w wycinku, wypchnąć każdą otrzymaną przez nie wartość do jednego kanału i zamknąć ten kanał wyjściowy po zamknięciu ostatniego z kanałów wejściowych. Coś takiego, ale dla wielu kanałów więcej niż dwa:

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

Powyższy kod zapobiega zajęciu pętli, ponieważ nie madefault case, co jest dobre (EDIT: wygląda na to, że obecność „, ok” sprawia, że ​​instrukcja select nie blokuje, a pętla jest zajęta. Ale dla przykładu, pomyśl kod tak, jakby blokował ). Czy taką samą funkcjonalność można uzyskać przy dowolnej liczbie kanałów wejściowych? Oczywiście można to zrobić, zmniejszając kawałek parami do pojedynczego kanału, ale bardziej interesuje mnie prostsze rozwiązanie, jeśli to możliwe.

questionAnswers(3)

yourAnswerToTheQuestion