選択ステートメントでの受信操作と送信操作のダイナミクスを明らかにする
チャネル結果を転送しようとする場合、多くは次の構成を選択します。
for { select { ... case ch2 <- (<-ch1): ... } }
このコードを調べると、選択操作のどの側面、つまり受信アクションまたは送信アクションが評価されているのかという疑問が生じます。
Go ドキュメントでは、これについて説明しています。
受信操作のチャネル オペランド、および送信ステートメントのチャネルおよび右側の式は、「select」ステートメントの入力時にソース順に 1 回だけ評価されます。
これは、指定された例では次のことを意味します。
式 <-ch1 はすぐに評価され、select ステートメントは ch2 への送信を実行するか、別のケースを実行するかを決定します。
事実上、このメソッドは ch1 からの受信を即時にブロックすることができます。選択は最終的に ch2 での後続の送信を制御します。ただし、代替ケースが選択された場合でも、ch1 からの値は依然として消費されて破棄されることに注意してください。以上が受信または送信は Go の「select」ステートメントで最初に評価されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。