


Comment utiliser le mot-clé de plage pour parcourir un canal en Go?
Jun 20, 2025 am 10:41 AMLorsque vous utilisez la plage pour traverser les canaux en Go, le canal doit être fermé par l'expéditeur pour éviter la panique. Les étapes spécifiques sont les suivantes: 1. Créez un canal et démarrez un goroutine pour lui envoyer des données; 2. Utilisez la fonction de fermeture pour fermer le canal une fois l'envoi terminé; 3. Utilisez la boucle pour la plage pour recevoir des données, et la boucle se terminera automatiquement après la fermeture du canal. Faites attention à ne pas fermer le canal plusieurs fois ou à envoyer des données au canal fermé, ce qui peut entra?ner des erreurs d'exécution. S'il y a plusieurs expéditeurs, l'opération d'arrêt doit être coordonnée via Sync.WaitGroup ou des canaux de signal supplémentaires pour assurer la sécurité et la stabilité du programme.
Dans GO, le mot-clé de range
est couramment utilisé pour itérer les canaux lorsque vous souhaitez recevoir des valeurs jusqu'à ce que le canal soit fermé. Cette approche est propre et évite la gestion manuelle des conditions de boucle pour la réception.
Voici comment cela fonctionne dans la pratique.
Comment utiliser range
avec un canal
Lorsque vous utilisez range
sur un canal dans une boucle for
une boucle, il continuera de tirer les valeurs du canal jusqu'à ce qu'il soit fermé. Vous n'avez pas besoin de vérifier une deuxième valeur de retour comme vous le pouvez avec des cartes ou des tranches - la boucle s'arrête simplement une fois le canal fermé.
ch: = make (chan int) aller func () { ch <- 1 ch <- 2 ch <- 3 Fermer (CH) } () pour val: = range ch { fmt.println (Val) }
Cela imprimera:
1 2 3
La boucle se termine après la fermeture du canal. Notez que vous devez fermer le canal ; Sinon, la boucle accrochera pour toujours en attendant plus d'entrée.
Quand fermer le canal
La fermeture d'un canal indique qu'aucune valeur ne sera envoyée. Il est important de s'assurer que seul le c?té envoi ferme le canal - pas le récepteur. La fermeture du c?té récepteur peut entra?ner une panique si un autre expéditeur est toujours actif.
Un modèle commun:
- Un ou plusieurs Goroutines envoient des données.
- Une fois tous les envois terminés, l'expéditeur ferme le canal.
- Le récepteur utilise
range
pour traiter toutes les données entrantes en toute sécurité.
Par exemple:
ch: = make (chan string) aller func () { Noms: = [] String {"Alice", "Bob", "Charlie"} pour _, nom: = noms de plage { ch <- nom } Fermer (CH) } () pour nom: = plage ch { fmt.println ("re?u:", nom) }
Cela garantit que la boucle sort proprement une fois tous les noms imprimés.
Pièges communs à éviter
Voici quelques gatchas lorsque vous utilisez des canaux à range
sur:
- Ne fermez pas un canal plusieurs fois. Cela entra?nera une panique d'exécution.
- N'envoyez pas sur un canal fermé. Cela provoque également une panique.
- Si vous ne savez pas si un canal doit être fermé, envisagez d'utiliser un
sync.WaitGroup
à la place pour coordonner l'achèvement sans fermer le canal.
Si vous travaillez avec plusieurs expéditeurs, la fermeture de coordination devient plus délicate. Dans ces cas, vous pouvez utiliser un signal séparé (comme un canal done
) ou un comptage de référence via sync.WaitGroup
.
Résumé
L'utilisation range
sur un canal est un moyen voisin de consommer toutes les valeurs envoyées dessus jusqu'à ce qu'elle soit fermée. N'oubliez pas de fermer le canal du c?té de l'expéditeur, évitez les erreurs courantes comme le double ou l'envoi sur un canal fermé, et vous serez prêt à partir.
C'est essentiellement comme ?a que cela fonctionne - simple mais facile à abuser si vous ne faites pas attention.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Dois-je installer un client Oracle lors de la connexion à une base de données Oracle à l'aide de Go? Lorsque vous développez GO, la connexion aux bases de données Oracle est une exigence commune ...

Gestion des ressources dans la programmation Go: MySQL et Redis se connectent et publient pour apprendre à gérer correctement les ressources, en particulier avec les bases de données et les caches ...

Explication détaillée du schéma de surveillance des ressources de la base de données PostgreSQL dans le cadre du système CentOS Cet article introduit une variété de méthodes pour surveiller les ressources de la base de données PostgreSQL sur le système CentOS, vous aidant à découvrir et à résoudre des problèmes de performances potentiels en temps opportun. 1. Utilisez des outils et des vues intégrés postgresql PostgreSQL sont livrés avec de riches outils et vues, qui peuvent être directement utilisés pour la surveillance des performances et de l'état: PG_STAT_ACTIVITY: Affichez les informations de connexion et de requête actuellement actives. PG_STAT_STATSTATION: Collectez les statistiques des instructions SQL et analysez les goulots d'étranglement des performances de requête. PG_STAT_DATABASE: fournit des statistiques au niveau de la base de données, telles que le nombre de transactions, Cache Hit

GO POINTER SYNTAXE ET ATTENDRE DES PROBLèMES DANS LA BIBLIOTHèQUE VIPER Lors de la programmation en langage Go, il est crucial de comprendre la syntaxe et l'utilisation des pointeurs, en particulier dans ...

GOISASTRONGCHOICEFORPROSTRESSNEDINGSIMPLICITY, Performance et Concurrence, ButMaylackinAdvancedFeaturesAnSystemMaturity.1) Go'SyntaxisSIMPLEADEASYTOLEARN, LeadToFewerBugsandMoreMaintAwing
