Ответ
Для чтения данных из канала в нескольких горутинах можно использовать общий канал. Каждая горутина будет конкурировать за доступ к нему, и данные будут распределяться между ними автоматически.
Пример:
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) // Важно закрыть канал после записи
Важные моменты:
- Канал должен быть закрыт после записи (
close(ch)), иначе горутины зависнут - Данные распределяются между горутинами конкурентно
- Можно использовать
selectс дополнительными каналами для более сложных сценариев