La capacité du canal dans Go peut être non tamponnée ou tamponnée. Les canaux non tamponnés n'ont pas de capacité et bloquent les émetteurs jusqu'à ce qu'un récepteur soit prêt, rendant les opérations synchrones. Les canaux tamponnés ont une capacité fixe définie lors de la déclaration, permettant aux émetteurs de continuer sans bloquer jusqu'à ce que le tampon soit plein, ce qui permet un comportement asynchrone. Fermer un canal empêche les envois ultérieurs, provoquant une panique, tandis que les récepteurs peuvent encore récupérer des valeurs jusqu'à ce que le tampon soit vide. Un canal fermé peut être détecté en vérifiant la deuxième valeur de retour d'une opération de réception. Go prend en charge les canaux de réception seule et d'envoi seule, restreignant leur utilisation à la réception ou à l'envoi de valeurs, respectivement. Ces types de canaux imposent un flux de données unidirectionnel et sont déclarés à l'aide d'une syntaxe spécifique. Tenter d'effectuer des opérations non autorisées par le type de canal entraîne des erreurs de compilation. Ce mécanisme de canal facilite la synchronisation et la communication entre les goroutines sans verrous explicites ou variables de condition. Les canaux tamponnés introduisent un comportement asynchrone en déconnectant les émetteurs et les récepteurs dans une certaine mesure.
dev.to
[Golang] Understanding Unbuffered and Buffered Channels
Create attached notes ...
