Как можно построить конвейер горутин

«Как можно построить конвейер горутин» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go конвейер горутин строится с помощью каналов, где каждая горутина выполняет часть работы и передаёт результат следующей. Основные шаги:

  1. Создаём каналы для передачи данных между этапами
  2. Запускаем горутины, каждая выполняет свою задачу
  3. Соединяем горутины через каналы

Пример простого конвейера:

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

Ключевые моменты:

  • Каждая функция возвращает канал для следующего этапа
  • Горутины закрывают каналы после завершения работы
  • Конвейер можно расширять, добавляя новые этапы обработки