Wie behandelt die „select'-Anweisung von Go gleichzeitige Empfangs- und Sendevorgänge?

Barbara Streisand
Freigeben: 2024-11-17 04:34:03
Original
878 Leute haben es durchsucht

How Does Go's `select` Statement Handle Simultaneous Receive and Send Operations?

Kommunikation von Kanälen über ausgewählte Anweisungen

Um Ergebnisse zwischen Kanälen weiterzuleiten, stoßen Sie möglicherweise auf Code wie diesen:

for {
    select {
        ...
        case ch2 <- <-ch1:
        ...
    }
}
Nach dem Login kopieren

Dieser Entwurf wirft Fragen darüber auf, wie „select“ sowohl auf Empfangs- als auch auf Sendevorgänge wirkt.

Empfangen oder Senden oder beides?

Im Gegensatz zur einzelnen Auswahl eines Vorgangs ist die Funktion „select Die Anweisung wertet die gesamte Operation aus, einschließlich der Empfangs- (<-ch1) und Sendeoperationen (ch2 <-), bei Eingabe der Auswahl. Dies bedeutet, dass:

case ch2 <- <-ch1:
Nach dem Login kopieren

den Empfang von Kanal 1 sofort blockiert und dann die Auswahl bestimmt, ob das Senden an Kanal 2 fortgesetzt wird oder ein anderer Fall ausgewählt wird.

Im Wesentlichen ist das select behandelt den obigen Fall wie folgt:

case ch2 <- <something>:
Nach dem Login kopieren

wobei wird bei Eingabe der Auswahl ausgewertet.

Nebenwirkungen

Dieses Design hat einen Nebeneffekt: wenn der Fall mit dem verschachtelten Empfang (<-ch1) nicht ausgewählt ist , der Wert von ch1 wird weiterhin verbraucht und verworfen.

Das obige ist der detaillierte Inhalt vonWie behandelt die „select'-Anweisung von Go gleichzeitige Empfangs- und Sendevorgänge?. 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