Junior — Middle
Se pot primi valori dintr-un canal în mai multe goroutines în același timp?
sobes.tech AI
Răspuns de la AI
Da, mai multe goroutines pot primi simultan valori dintr-un canal în Go. Canalele în Go suportă citire și scriere multiple, permițând mai multor goroutines să citească din același canal în paralel.
Cu toate acestea, este important de reținut că dacă mai multe goroutines citesc din același canal, fiecare valoare va fi primită doar de una dintre ele — valorile nu sunt duplicate. Acest lucru este util pentru distribuirea muncii între goroutines (pool de lucrători).
Exemplu:
ch := make(chan int)
// Pornim mai multe goroutines care citesc din canal
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d a primit %d\n", id, val)
}
}(i)
}
// Trimitem date în canal
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
În acest exemplu, valorile din canal sunt distribuite între cele trei goroutines.