この記事では、使用方法について説明します select ステートメント Go プログラムで並列処理、同時実行、および同期を実現するのに役立つ例を提供します。
Golang で select ステートメントを使用するには?
switch ステートメントと同様に、 select ステートメント 多くの式の中から 1 つの式を選択して実行することができますが、主な違いは次のとおりです。 選択する スイッチは select ステートメント つまり、待機原則に基づいて機能します。 select ステートメント 通信が完了するまで実行されません。
ここでの通信とは、特定のチャネルを介してデータを送受信することを指します。通信が完了すると、次のチェックが実行され、Go 言語の select ステートメントが完全にチャネルに依存していることがわかります。
Select ステートメントの構文
に使用される単純な構文 select ステートメント Go 言語を使用する方法を以下に示します。
選択する {
場合 チャンネル_1 :
// channel_1 の準備ができたときに実行するコード
場合 チャンネル_2 :
// channel_2 の準備ができたときに実行するコード
場合 チャンネル_3 :
// channel_3 の準備ができたときに実行するコード
場合 channel_4 :
// channel_4 の準備ができたときに実行するコード
デフォルト :
// どのチャネルも準備ができていない場合に実行するコード
}
ここ:
- 以内 select ステートメント 、それぞれのケースは、受信操作または送信操作のチャネル操作を表します。
- の select ステートメント いずれかのケースの準備が整うまで待機し、それと関連するケース ステートメントを実行します。
- 実行可能なチャネルが複数ある場合は、ランダムにチャネルを選択します。
Golang でチャンネルを作成する方法
Go でチャネルを作成するには、ユーザーは make 関数を使用し、その後に ちゃん キーワードを入力し、int、string、またはその他のチャネル タイプを指定します。
チャンネル := 作る ( ちゃんタイプ )Golang で Select ステートメントを実装する
ここでは、使用の基本を学ぶのに役立ついくつかの例を提供します。 select ステートメント ゴランで。
例 1
次の例は、 select ステートメント 両方のチャネルの実行準備が整ったときのパフォーマンスを示します。
パッケージメイン輸入 'fmt'
関数メイン ( ) {
一つに := 作る ( ちゃん 整数 )
力 := 作る ( チャンストリング )
chan_numに行く ( 一つに )
chan_strに行く ( 力 )
選択する {
場合 Ch1 := <- 一つに :
fmt。 プリントイン ( 「チャンネルデータ:」 、 Ch1 )
場合 Ch2 := <- 力 :
fmt。 プリントイン ( 「チャンネルデータ:」 、 Ch2 )
}
}
func chan_num ( ナムちゃん 整数 ) {
一つに <- 67
}
func chan_str ( ストチャンストリング ) {
力 <- 「リナックス」
}
上記の例では、2 つのチャネルを作成しました。 1つに、 と 力 Go関数を使用しました chan_num() データを num チャネルに送信し、 chan_str() str チャネルにデータを送信します。プログラムには 2 つの異なるチャンネルが含まれているため、 select ステートメント それらの1つを実行します。
場合 Ch1 から値を読み取ります チャンネル数 そしてそれを表示します。同様に、ケース Ch2 からの値を返します 力 チャネル。上記のプログラムは、使用可能なチャネルの出力を返します。 出力
例 2
チャンネルに遅延を追加し、別のチャンネルの出力を返したい場合は、 時間.スリープ() 指定されたチャンネルで機能します。これにより、他のチャネルの出力をコンソールに出力できます。そのような場合の例を次に示します。
パッケージメイン輸入 (
'fmt'
'時間'
)
関数メイン ( ) {
一つに := 作る ( ちゃん 整数 )
力 := 作る ( チャンストリング )
chan_numに行く ( 一つに )
chan_strに行く ( 力 )
選択する {
場合 Ch1 := <- 一つに :
fmt。 プリントイン ( 「チャンネルデータ:」 、 Ch1 )
場合 Ch2 := <- 力 :
fmt。 プリントイン ( 「チャンネルデータ:」 、 Ch2 )
}
}
func chan_num ( ナムちゃん 整数 ) {
一つに <- 67
}
func chan_str ( ストチャンストリング ) {
時間 . 寝る ( 5 * 時間 . 2番 )
力 <- 「リナックス」
}
上記のコードでは、 時間.スリープ() 内部の機能 chan_str() 関数。最初の 5 秒間は num チャネルのみが実行可能です。その結果、 select ステートメント ケースを実行します Ch1 .
出力
ノート: 両方のチャネルに遅延を追加して、チャネルの実行を遅らせることができます。
結論
の select ステートメント Go では、通信が完了するまでステートメントが実行されない待機原則を使用して、多くの式から 1 つの式を選択して実行できます。上記のガイドラインには、 select ステートメント 基本的な構文と例。