Sobes.tech
Junior — Middle

Peut-on recevoir des valeurs d'un canal dans plusieurs goroutines en même temps?

sobes.tech IA

Réponse de l'IA

Oui, plusieurs goroutines peuvent simultanément recevoir des valeurs d'un même canal en Go. Les canaux en Go supportent la lecture et l'écriture multiples, ce qui permet à plusieurs goroutines de lire d'un même canal en parallèle.

Cependant, il est important de noter que si plusieurs goroutines lisent d'un même canal, chaque valeur ne sera reçue que par une seule d'entre elles — les valeurs ne sont pas dupliquées. Cela est pratique pour répartir le travail entre les goroutines (pool de workers).

Exemple :

ch := make(chan int)

// Lancer plusieurs goroutines qui lisent du canal
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d a reçu %d\n", id, val)
        }
    }(i)
}

// Envoyer des données dans le canal
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Dans cet exemple, les valeurs du canal sont réparties entre les trois goroutines.