Heim > Backend-Entwicklung > Golang > Wird „Empfangen' oder „Senden' in einer Go-„select'-Anweisung zuerst ausgewertet?

Wird „Empfangen' oder „Senden' in einer Go-„select'-Anweisung zuerst ausgewertet?

Susan Sarandon
Freigeben: 2024-11-15 00:48:02
Original
702 Leute haben es durchsucht

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

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):
        ...
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage