Назад к вопросам
OZON
Middle+
7
Написать код функции, которая делает merge N каналов. Весь входной поток перенаправляется в один канал. func merge(cs ...<-chan int) <-chan int { ... }
Компании, где спрашивали
Ответ от нейросети
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 каналов объединяются в один поток.