Canaux Golang

Canaux Golang
Un canal dans GO fait référence à une technique à travers laquelle les goroutines peuvent communiquer. Autrement dit, un canal est un tuyau à travers lequel vous pouvez connecter des goroutines simultanées, permettant une communication. La communication entre les goroutines est bidirectionnelle. Ainsi, permettant aux Goroutines d'envoyer et de recevoir de la valeur via le même canal.

Golang Créer un canal

Avant de pouvoir utiliser un canal en Go, nous devons en créer un. Pour créer un canal en Go, nous pouvons utiliser la fonction de fabrication pour créer un nouveau canal.

La syntaxe est comme indiqué:

Make (Chan Val-Type)

Gardez à l'esprit qu'un canal est sensible au type de données. Cela signifie que nous ne pouvons pas envoyer de valeur int via un canal de chaîne.

L'exemple suivant crée un canal qui ne peut prendre en charge que les types de chaînes:

ch: = make (chan string)

Une fois que nous avons déclaré un canal, nous pouvons envoyer et recevoir des valeurs.

Envoi et réception de valeurs

Nous pouvons envoyer et recevoir des valeurs en utilisant le canal <- operator. An example code is as shown below:

package principal
Importer "FMT"
funcmain ()
ch: = make (chantring)
// Envoi à la chaîne
gofunc ()
ch<- "Hello"
()
// Recevez
msg: = <-ch
fmt.Println (msg)

Dans l'exemple précédent, nous créons un goroutine de base pour envoyer les données au canal "CH". Nous recevons ensuite les données du canal et les imprimons.

Envoi de structure via le canal

Nous pouvons également envoyer des données de structure via un canal, à condition que nous créons le canal avec le type correct.

Considérez l'exemple de code suivant:

package principal
Importer "FMT"
Tapez user struct
Firstname, LastNamestring

funcmain ()
user1: = utilisateur "Jane", "Doe"
ch: = make (utilisateur chan)
gofunc ()
ch<- user1
()
first_name: = (<-ch).FirstName
fmt.Println (first_name)

Si nous exécutons le code précédent, il devrait imprimer le prénom tel que reçu par la structure envoyée via le canal.

Canaux unidirectionnels

Comme mentionné, les canaux GO sont bidirectionnels par défaut. Cependant, nous pouvons définir un canal afin qu'il puisse envoyer ou recevoir des valeurs mais pas les deux. Ceci est connu comme un canal unidirectionnel.

La syntaxe est comme indiqué:

ch: = make (chan<- data_type) // send-only channel
ch: = faire (<-chan data_type) // receive only channel

Remarquez la position de l'opérateur de canal dans la syntaxe précédente.

L'exemple suivant crée un canal d'envoi uniquement:

package principal
Importer "FMT"
Tapez user struct
Firstname, LastNamestring

funcmain ()
ch: = make (chan<- string)
gofunc ()
ch<- "Hi"
()
msg: = <- ch

Remarque La chaîne précédente est définie pour envoyer uniquement. Cependant, nous essayons de recevoir via le canal et le compilateur renvoie une erreur comme indiqué:

opération invalide: <-ch (receive depuis Type d'envoi uniquement chan<- string)

Canaux de clôture

Nous pouvons fermer un canal après l'envoi des valeurs requises. Pour cela, nous utilisons la fonction rapprochée. Il prend le nom du canal. Il ferme ensuite le canal et renvoie une valeur booléenne que vous pouvez utiliser pour vérifier si le canal est fermé.

Un exemple est indiqué ci-dessous:

package principal
Importer "FMT"
Tapez user struct
Firstname, LastNamestring

funcmain ()
ch: = make (chantring)
gofunc ()
ch<- "Hi"
()
_, ok: = <-ch
Fermer (CH)
si !d'accord
fmt.Println ("fermé… [ok]")

fmt.Println ("Fermer… [échouer!] ")

L'exemple précédent ferme le canal à l'aide de la méthode close (). Nous utilisons ensuite la valeur booléenne renvoyée de la fonction pour vérifier si le canal est fermé.

Conclusion

Ce guide vous guide sur la façon de travailler avec les canaux dans le langage de programmation Go. Le processus de création d'un canal, d'envoi et de réception de valeurs, d'envoi de données de structure via un canal, expliquant les canaux unidirectionnels et la fermeture des canaux a été discuté. Nous espérons que vous avez trouvé cet article utile. Découvrez les autres articles sur les conseils pour plus de conseils et d'informations.