Recevoir et envoyer sur le même canal dans des instructions Select
Les instructions Select de Go offrent un contrôle de concurrence flexible en permettant l'exécution simultanée de plusieurs opérations. Cependant, cela soulève la question de savoir comment l'instruction select interagit avec les opérations qui impliquent à la fois la réception et l'envoi sur le même canal.
La réponse réside dans la façon dont Go évalue les canaux et les expressions au sein d'une instruction select. Selon la documentation officielle, les opérandes de canal et les expressions de droite des instructions send sont évalués lors de la saisie de la sélection. Cela signifie que l'expression :
case ch2 <- (<-ch1):
est effectivement traitée comme :
case ch2 <- <something>:
où
Par conséquent, l'instruction select se bloque immédiatement lors de l'opération de réception de ch1. Si ch1 a une valeur, l'opération de réception réussit et l'opération d'envoi à ch2 est exécutée. Si ch1 n'a pas de valeur, la sélection continue d'attendre jusqu'à ce qu'une valeur soit disponible ou qu'un autre cas soit sélectionné.
Ce comportement a pour effet secondaire de potentiellement consommer et rejeter une valeur de ch1 même si l'opération d'envoi vers ch2 n’est pas sélectionné. Il est important d'en tenir compte lors de la conception de programmes concurrents pour éviter tout comportement inattendu.
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!