Golang で select ステートメントを使用するには?

Golang De Select Sutetomentowo Shi Yongsuruniha



select ステートメント Golang では、開発者は Go ルーチン、チャネル、およびデータ ストリーム間で同期および通信できます。これにより、Go プログラムは一度に複数のチャネル操作を待機し、準備ができている最初の操作を実行できます。

この記事では、使用方法について説明します 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 ステートメント 基本的な構文と例。