Ответ
В Go конвейер горутин строится с помощью каналов, где каждая горутина выполняет часть работы и передаёт результат следующей. Основные шаги:
- Создаём каналы для передачи данных между этапами
- Запускаем горутины, каждая выполняет свою задачу
- Соединяем горутины через каналы
Пример простого конвейера:
func gen(nums ...int) <-chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
close(out)
}()
return out
}
func sq(in <-chan int) <-chan int {
out := make(chan int)
go func() {
for n := range in {
out <- n * n
}
close(out)
}()
return out
}
// Использование:
nums := gen(1, 2, 3)
squares := sq(nums)
for n := range squares {
fmt.Println(n)
}
Ключевые моменты:
- Каждая функция возвращает канал для следующего этапа
- Горутины закрывают каналы после завершения работы
- Конвейер можно расширять, добавляя новые этапы обработки