Sobes.tech
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.