Junior — Middle
Da li je moguće istovremeno dobijati vrednosti iz jednog kanala u više gorutina?
sobes.tech АИ
Одговор од АИ
Да, више горутина може истовремено примати вредности из једног канала у 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)
У овом примеру, вредности из канала се распоређују међу три горутине.