Maison  >  Article  >  développement back-end  >  Comment vérifier si une chaîne Go est fermée sans la lire ?

Comment vérifier si une chaîne Go est fermée sans la lire ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-14 16:11:02815parcourir

How to Check if a Go Channel is Closed Without Reading from It?

Comment vérifier qu'une chaîne est fermée sans la lire ?

Cette question se pose lorsque l'on travaille avec des chaînes dans Go, où il est essentiel de déterminer la fermeture du canal sans blocage. Dans l'exemple de code fourni, il est souhaité de supprimer un canal d'une tranche lorsque le travailleur correspondant quitte.

Le problème

Fermer un canal dans travailleur() pendant essayer d'y écrire dans le contrôleur () provoquera une panique. L'utilisation d'un mutex pour protéger cette opération conduit à une impasse. Attribuer un tampon plus grand au canal n'est pas non plus une solution viable.

Solution proposée

Pour résoudre ce problème, il est suggéré que Worker() ferme le canal lorsque ça sort. Le contrôleur() peut alors vérifier les canaux fermés et éviter d'y écrire. Cependant, il n'existe actuellement aucune fonction intégrée dans Go pour vérifier la fermeture du canal sans le lire.

Solutions de contournement possibles

  • Récupération après panique : Bien que ce ne soit pas idéal, il est possible de vérifier de manière piratée la fermeture d'un canal en essayant d'écrire sur le canal et en récupérant la panique déclenchée. Cependant, cette approche n'est pas applicable aux canaux de lecture.
  • Lire le canal avec indicateur : La lecture à partir d'un canal à l'aide de v, ok := <-c peut indiquer la fermeture du canal via l'indicateur ok . Cependant, cette méthode implique toujours la lecture depuis la chaîne.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn