Tous les exemples que j'ai vus jusqu'à présent impliquent un blocage pour obtenir le résultat (via l'opérateur Mon approche actuelle implique de passer un pointeur à une structure: p> que le goroutine écrit à la fin. Ensuite, c'est une simple question de vérifier Que je suis vraiment visible est un système de signalisation de signal de style QT. J'ai une hunch la solution aura l'air presque triviale ( <- chan code>).
fini code> chaque fois qu'il est pratique. Avez-vous de meilleures alternatives? P>
chan code> s ont lots i> de potentiel inexploré), mais je ne suis pas encore assez familier avec la langue pour le comprendre. p> p>
3 Réponses :
Sélectionner des instructions vous permet de vérifier plusieurs canaux à la fois, en prenant une branche aléatoire ( de ceux où la communication attend): pour tout l'envoi et recevoir
expressions dans la déclaration "Select",
Les expressions de la chaîne sont évaluées,
avec des expressions qui apparaissent
sur le côté droit de l'envoi
expressions, dans l'ordre de haut en bas.
Si l'une des opérations obtenues peut
procéder, on est choisi et le
communication correspondante et
Les déclarations sont évaluées. Autrement,
S'il y a un cas par défaut, que
Exécute; Sinon, la déclaration bloque
jusqu'à ce que l'une des communications puisse
complet. p>
blockQuote> p>
@Jurily: Êtes-vous sûr de ça? Il devrait être correct, mais il faudrait mieux sans l'espace après <- code>.
Vous pouvez utiliser le modèle "virgule, ok" "(voir leur page sur" Efficace Go "):
foo := <- ch; // This blocks. foo, ok := <- ch; // This returns immediately.
Vous devez écrire: Sélectionnez {Case FOO: = <-CH: Par défaut:}
Vous pouvez également jeter un coup d'œil sur le tampon de canal pour voir si elle contient quoi que ce soit à l'aide de len: Ceci ne touche pas le tampon de canal, contrairement à foo, gottvalue: = <- ch code> qui supprime une valeur lorsque
gottvalue == true code>. p> p>