Enthüllung der Dynamik von Empfangs- und Sendevorgängen in ausgewählten Anweisungen
Beim Versuch, Kanalergebnisse weiterzuleiten, entscheiden sich viele für das folgende Konstrukt:
for { select { ... case ch2 <- (<-ch1): ... } }
Die Untersuchung dieses Codes wirft die Frage auf: Welcher Aspekt der Auswahloperation wird ausgewertet, der Empfang oder das Senden? Aktion?
Die Go-Dokumentation bringt Licht ins Dunkel:
Die Kanaloperanden von Empfangsoperationen und die Kanal- und rechten Ausdrücke von Sendeanweisungen werden genau einmal ausgewertet, in der Reihenfolge der Quellen. bei Eingabe der „select“-Anweisung.
Dies impliziert, dass im gegebenen Beispiel der Ausdruck <-ch1 sofort ausgewertet wird und die select-Anweisung damit fortfährt, zu bestimmen, ob gesendet wird an ch2 oder ein alternativer Fall wird ausgeführt.
Effektiv ermöglicht diese Methode die sofortige Blockierung des Empfangs von ch1, wobei der Select letztendlich das nachfolgende Senden auf ch2 steuert. Es ist jedoch zu beachten, dass selbst wenn ein alternativer Fall gewählt wird, der Wert von ch1 immer noch verbraucht und verworfen wird.
Das obige ist der detaillierte Inhalt vonWird „Empfangen' oder „Senden' in einer Go-„select'-Anweisung zuerst ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!