Sobes.tech
Back to questions
Middle+
6

Написать код функции, которая делает merge N каналов. Весь входной поток перенаправляется в один канал. func merge(cs ...<-chan int) <-chan int { ... }

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

go func merge(cs ...<-chan int) <-chan int { out := make(chan int) var wg sync.WaitGroup

wg.Add(len(cs))
for _, c := range cs {
    go func(ch <-chan int) {
        defer wg.Done()
        for v := range ch {
            out <- v
        }
    }(c)
}

go func() {
    wg.Wait()
    close(out)
}()

return out

}


Этот код создаёт выходной канал `out`, запускает горутину для каждого входного канала, которая читает из него и пишет в `out`. После того как все входные каналы закрыты и данные из них прочитаны, выходной канал закрывается. Таким образом, все значения из N каналов объединяются в один поток.