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