Назад к вопросам
Junior — Middle
82
Можно ли получать значения из одного канала в нескольких горутинах одновременно?
Ответ от нейросети
sobes.tech AI
Да, несколько горутин могут одновременно получать значения из одного канала в Go. Каналы в Go поддерживают множественное чтение и запись, что позволяет нескольким горутинам читать из одного канала параллельно.
Однако важно учитывать, что если несколько горутин читают из одного канала, то каждое значение будет получено только одной из них — значения не дублируются. Это удобно для распределения работы между горутинами (worker pool).
Пример:
ch := make(chan int)
// Запускаем несколько горутин, которые читают из канала
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Горутина %d получила %d\n", id, val)
}
}(i)
}
// Отправляем данные в канал
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
В этом примере значения из канала распределяются между тремя горутинами.