52 votes

Vérifier si un canal a une valeur prête à lire, en utilisant Go

Comment puis-je vérifier si une chaîne a une valeur à lire ?

Je ne veux pas bloquer lors de la lecture d'une chaîne. Je veux voir si ça a une valeur. S'il en a un, je le lirai. S'il n'en a pas (encore), je ferai autre chose et revérifierai plus tard.

16voto

Malheureusement, les réponses précédentes sont incorrectes. La spécification dit clairement que vous POUVEZ utiliser les canaux de cette façon en utilisant la fonction len(), mais uniquement si vous avez spécifié la capacité du canal - la longueur de la mémoire tampon pour un canal lors de sa création. Si vous avez omis une capacité de canal lors de sa création, les opérations de canal sont toujours bloquantes.

15voto

Jessta Points 1023

Si vous faites cela souvent, ce n'est probablement pas un bon design et vous feriez peut-être mieux de créer une autre goroutine pour faire le travail que vous prévoyez de faire quand il n'y a rien à lire sur la chaîne. La nature synchrone/bloquante des canaux de Go rend le code plus facile à lire et à raisonner, tandis que le planificateur et les goroutines bon marché signifient que les appels asynchrones sont inutiles car les goroutines en attente consomment très peu de ressources.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X