Как в нескольких горутинах прочитать данные из канала

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

Ответ

Для чтения данных из канала в нескольких горутинах можно использовать общий канал. Каждая горутина будет конкурировать за доступ к нему, и данные будут распределяться между ними автоматически.

Пример:

ch := make(chan int)

// Запускаем 3 горутины для чтения
for i := 0; i < 3; i++ {
    go func(id int) {
        for v := range ch {
            fmt.Printf("Горутина %d получила: %dn", id, v)
        }
    }(i)
}

// Записываем данные в канал
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch) // Важно закрыть канал после записи

Важные моменты:

  1. Канал должен быть закрыт после записи (close(ch)), иначе горутины зависнут
  2. Данные распределяются между горутинами конкурентно
  3. Можно использовать select с дополнительными каналами для более сложных сценариев