Sobes.tech
Junior — Middle

Est-il permis d'envoyer des messages à un seul canal avec plusieurs goroutines en même temps?

sobes.tech IA

Réponse de l'IA

Oui, en Go, il est permis d’envoyer des messages à un canal depuis plusieurs goroutines simultanément. Les canaux en Go sont sûrs pour la concurrence et assurent la synchronisation entre goroutines.

Cependant, il est important de se rappeler :

  • Si plusieurs goroutines écrivent dans un même canal et que personne ne le lit, cela entraînera un blocage.
  • Si le canal est tamponné, les écritures ne seront bloquées que lorsque le tampon sera plein.
  • Il faut gérer soigneusement la fermeture du canal : seul l’expéditeur doit le fermer, et seulement lorsqu’il est sûr qu’il n’y aura plus d’écritures.

Exemple :

ch := make(chan int)

// Lancer plusieurs goroutines envoyant des données dans le canal
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Lecture du canal
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Ainsi, l’envoi simultané dans un canal depuis plusieurs goroutines est une pratique courante en Go.