Вопрос: Как сделать пайплайн (fan-out → fan-in) на каналах?

Python Middle Без компании
Вопрос: Как сделать пайплайн (fan-out → fan-in) на каналах?
Ответы
```go in := gen(10) // fan-out w := func(in <-chan int) <-chan int { out := make(chan int) go func() { defer close(out) for v := range in { out <- v * v } }() return out } c1 := w(in) c2 := w(in) // fan-in merge := func(a, b <-chan int) <-chan int { out := make(chan int) var wg sync.WaitGroup wg.Add(2) forward := func(ch <-chan int) { defer wg.Done() for v := range ch { out <- v } } go forward(a) go forward(b) go func(){ wg.Wait(); close(out) }() return out } for v := range merge(c1, c2) { fmt.Println(v) } ``` **Как это работает:** `fan-out` распараллеливает работу, `fan-in` объединяет результаты. Важно закрывать выходной канал после завершения всех воркеров.