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.