Heim >Backend-Entwicklung >Golang >Wie behandelt die „select'-Anweisung von Go gleichzeitige Empfangs- und Sendevorgänge?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-17 04:34:03947Durchsuche

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:
        ...
    }
}

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:

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>:

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!

Stellungnahme:
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