Sobes.tech
Back to questions
Junior — Middle
83

Можно ли получать значения из одного канала в нескольких горутинах одновременно?

Answer from AI

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)

В этом примере значения из канала распределяются между тремя горутинами.