Junior — Middle
È possibile ricevere valori da un canale in più goroutine contemporaneamente?
sobes.tech AI
Risposta dell'AI
Sì, più goroutine possono ricevere contemporaneamente valori da un canale in Go. I canali in Go supportano operazioni di lettura e scrittura multiple, consentendo a più goroutine di leggere da un canale contemporaneamente.
Tuttavia, è importante notare che se più goroutine leggono da un canale, ogni valore sarà ricevuto solo da una di esse — i valori non vengono duplicati. Questo è utile per distribuire il lavoro tra le goroutine (pool di lavoratori).
Esempio:
ch := make(chan int)
// Avviare più goroutine che leggono dal canale
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d ha ricevuto %d\n", id, val)
}
}(i)
}
// Inviare dati nel canale
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
In questo esempio, i valori del canale vengono distribuiti tra le tre goroutine.