Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

Да, няколко горутини могат едновременно да получават стойности от един канал в Go. Каналите в Go поддържат множество операции за четене и писане, което позволява на няколко горутини да четат от един и същи канал паралелно.

Въпреки това, важно е да се има предвид, че ако няколко горутини четат от един канал, всяка стойност ще бъде получена само от една от тях — стойностите не се дублират. Това е полезно за разпределяне на работата между горутините (работен пул).

Пример:

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)

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