Maison >développement back-end >Golang >La réception ou l'envoi sont-ils évalués en premier dans une instruction Go « select » ?

La réception ou l'envoi sont-ils évalués en premier dans une instruction Go « select » ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 00:48:02672parcourir

Is Receive or Send Evaluated First in a Go `select` Statement?

Dévoilement de la dynamique des opérations de réception et d'envoi dans certaines déclarations

Lorsqu'ils cherchent à transmettre les résultats du canal, beaucoup optent pour la construction suivante :

for {
    select {
        ...
        case ch2 <- (<-ch1):
        ...
    }
}

L'examen de ce code soulève la question : quel aspect de l'opération de sélection est évalué, la réception ou l'envoi action ?

La documentation Go met en lumière ceci :

Les opérandes de canal des opérations de réception et les expressions de canal et de droite des instructions d'envoi sont évaluées exactement une fois, dans l'ordre source, lors de la saisie de l'instruction "select".

Cela implique que dans l'exemple donné, l'expression <-ch1 est évaluée immédiatement et l'instruction select détermine si l'envoi à ch2 ou un cas alternatif sera exécuté.

Effectivement, cette méthode permet un blocage immédiat de la réception de ch1, la sélection contrôlant finalement l'envoi suivant sur ch2. Cependant, il convient de noter que même si un autre cas est choisi, la valeur de ch1 sera toujours consommée et supprimée.

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