Sobes.tech
Middle

Qu'est-ce qu'un canal en Go ? Quels sont les types de canaux ? En quoi les canaux tamponnés diffèrent-ils des non tamponnés ?

sobes.tech IA

Réponse de l'IA

Un canal en Go est un type de données utilisé pour transmettre des valeurs entre goroutines, assurant la synchronisation et l'échange de données.

Types de canaux :

  • Canaux sans tampon — n'ont pas de tampon interne, l'envoi se bloque jusqu'à ce que le récepteur lise la valeur.
  • Canaux tamponnés — ont un tampon interne de taille fixe, et l'envoi ne se bloque que si le tampon est plein.

Différences :

  • Dans les canaux sans tampon, l'expéditeur et le récepteur doivent être prêts en même temps pour envoyer/recevoir, ce qui garantit une synchronisation stricte.
  • Dans les canaux tamponnés, l'expéditeur peut mettre plusieurs valeurs dans le tampon sans attendre le récepteur, jusqu'à ce que le tampon soit plein.

Exemple de création et d'utilisation d'un canal tamponné :

ch := make(chan int, 2) // tampon de 2 éléments
ch <- 1
ch <- 2
// ch <- 3 // se bloque jusqu'à ce qu'il y ait de l'espace
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2