同じ Select Case での受信操作と送信操作
Go では、select ステートメントを使用すると、ゴルーチンが複数のブロッキング通信操作を同時に実行できます。同じ select ケースで受信操作と送信操作の両方を使用する場合、操作フローを理解することが重要です。
Go のドキュメントには、select ステートメントを入力すると、受信操作のチャネル オペランドとチャネルが正しく指定されると記載されています。 send ステートメントのハンド側式は 1 回評価されます。この評価により、受信または送信するチャネルのセットと、対応する送信値が決定されます。
この例では、
for { select { ... case ch2 <- (<-ch1): ... } }
ステートメントは、ch1 からの受信操作を直ちにブロックします。次に、select ステートメントは、どの選択ケースが続行されるかを評価します。 ch2 のケースが選択された場合、ch2 での送信操作が発生します。
ch2 のケースが選択されていない場合でも、ch1 からの受信操作は値を消費して破棄することに注意することが重要です。これには、ch1 のバッファがクリアされるという副作用があります。
したがって、同じ選択ケースで受信操作と送信操作の両方を使用すると、受信操作が即座にブロックされ、選択ステートメントによってどちらの通信操作が続行されるかが決まります。評価された条件に基づいて。
以上がGo Select の場合、受信操作と送信操作はどのように連携しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。