Sobes.tech
Middle

Quels sont les types de canaux en Go ? Parlez des canaux tamponnés et non tamponnés.

sobes.tech IA

Réponse de l'IA

Dans Go, les canaux (channels) ont deux types principaux : avec tampon et sans tampon.

  • Canaux sans tampon sont des canaux sans buffer interne. L’envoi dans un tel canal se bloque jusqu’à ce qu’une autre goroutine lise une valeur du canal, et vice versa — la lecture se bloque jusqu’à ce qu’une valeur apparaisse. Cela assure la synchronisation entre goroutines.

  • Canaux avec tampon ont un tampon interne de taille fixe. L’envoi dans le canal ne se bloque que si le tampon est plein, et la lecture se bloque si le tampon est vide. Cela permet une certaine asynchronie entre l’expéditeur et le récepteur.

Exemple de création et d’utilisation :

ch := make(chan int)         // canal sans tampon
chBuf := make(chan int, 3)   // canal avec tampon de 3 éléments

// Le canal sans tampon nécessite une synchronisation :
ngo func() {
    ch <- 42 // se bloque jusqu’à ce que quelqu’un lise
}()
valeur := <-ch

// Le canal avec tampon permet d’envoyer jusqu’à 3 éléments sans blocage :
chBuf <- 1
chBuf <- 2
chBuf <- 3
// Lors de la tentative d’envoi d’un 4ème élément, le blocage se produira jusqu’à ce qu’il soit lu

valeurBuf := <-chBuf

Ainsi, le choix du type de canal dépend des exigences de synchronisation et de performance.