Golang, en tant que langage de programmation privilégié par les développeurs, est également largement utilisé pour créer des applications performantes et hautement évolutives. Dans Golang, le canal est une fonctionnalité très importante, en tant que moyen de transférer des données entre différentes coroutines Go, est un élément indispensable de nombreuses applications Golang. Dans le même temps, la fermeture du canal est également une opération très importante. Présentons en détail les points de connaissance pertinents pour la fermeture du canal dans Golang.
Tout d'abord, le canal est une structure de données de type sécurisé, premier entré, premier sorti (FIFO), qui est utilisée comme l'un des principaux mécanismes de synchronisation dans Golang. Les canaux réalisent la synchronisation via deux opérations, des opérations d'envoi et de réception, similaires aux tuyaux. Pour une seule donnée d'un canal, on parle généralement d'opération de communication (Command).
Dans Golang, le type de canal doit être explicitement déclaré comme chan, et il peut être déclaré comme canal d'un type spécifique. Les canaux sont généralement créés à l'aide des fonctions intégrées de make.
Voici un exemple simple :
// 创建整型的通道 c := make(chan int)
Dans le code ci-dessus, nous créons un canal entier, puis nous effectuerons plusieurs opérations sur le canal.
Dans Golang, vous pouvez utiliser la fonction intégrée close() pour fermer une chaîne. La fonction de cette fonction est de fermer la chaîne fermée. Les données ne peuvent pas être envoyées vers un canal fermé. Les données non lues dans le canal fermé peuvent continuer à être lues. La lecture d'un canal fermé renverra immédiatement une valeur nulle du type de canal.
Voici un exemple simple :
c := make(chan int) // 向通道发送数据 go func(c chan int) { c <- 1 c <- 2 c <- 3 c <- 4 c <- 5 close(c) }(c)
Dans le code ci-dessus, nous utilisons le mot-clé go pour créer une coroutine pour envoyer des données au canal. Après avoir envoyé toutes les données, nous appelons la fonction intégrée close() pour fermer le canal.
Veuillez noter qu'après la fermeture du canal, nous pouvons toujours lire les données non lues du canal déjà fermé, mais cela renverra la valeur nulle du type de canal. Voici un exemple simple :
c := make(chan int) go func(c chan int) { c <- 1 close(c) }(c) // 从通道中读取数据 fmt.Println(<-c) fmt.Println(<-c)
Dans le code ci-dessus, nous lisons deux fois la valeur du canal fermé c. Puisque c ne peut plus être écrit après la fermeture du canal, c renvoie la valeur zéro 0 du type de canal pour la deuxième opération de lecture.
Dans Golang, vous pouvez utiliser la fonction intégrée close() pour déterminer si une chaîne est fermée. Lorsque le canal est fermé, la fonction close() retournera vrai, sinon elle retournera faux.
Voici un exemple simple :
//判断通道是否关闭 c := make(chan int) go func(c chan int) { c <- 1 close(c) }(c) if !closed(c) { fmt.Println("The channel is still open!") } else { fmt.Println("The channel is already closed!") }
Dans le code ci-dessus, nous créons une coroutine pour envoyer une valeur au canal c puis fermons le canal. Dans le code suivant, nous déterminons si le canal est fermé en appelant la fonction close().
Après la fermeture d'un canal, les valeurs non lues peuvent toujours y être lues. Lors de la lecture des données d'un canal, nous pouvons utiliser une boucle for pour parcourir toutes les valeurs du canal.
Voici un exemple simple :
//遍历通道中的所有值 c := make(chan int) go func(c chan int) { c <- 1 c <- 2 c <- 3 c <- 4 c <- 5 close(c) }(c) for v := range c { fmt.Println(v) }
Dans l'exemple ci-dessus, nous envoyons des valeurs entières 1 à 5 au canal c dans l'ordre. Après avoir fermé le canal, nous utilisons une boucle for pour parcourir toutes les valeurs du canal et afficher ces valeurs.
Résumé
Dans Golang, Channel est une fonctionnalité très utile, très pratique lors du transfert de données entre différentes coroutines Go. Fermer les chaînes (Channels) et déterminer si les chaînes sont fermées (Closed Channels) sont également des opérations très importantes. Ici, nous travaillons sur plusieurs exemples, dans l'espoir d'avoir une compréhension plus approfondie de l'utilisation des canaux dans Golang.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!