golangにおけるselectの理解について

藏色散人
リリース: 2020-08-26 11:46:45
転載
2849 人が閲覧しました

次のコラムでは、Golang チュートリアル コラムから、golang での select の理解を紹介します。

golangにおけるselectの理解について

Select ステートメントの構文は Switch ステートメントとよく似ていますが、Select の Case は通信操作 (チャネル操作) である必要があります。実行ロジックは次のとおりです。 Case の背後にあるどのチャネル操作が正常に実行できるか。その後、Case の下のコード ブロックが実行されます。複数の Case を同時に正常に実行できる場合、そのうちの 1 つがランダムに選択されます。どの Case も正常に実行できない場合は、デフォルトのコード ブロックが実行されます。デフォルトがない場合はブロックされ、デッドロック エラーが返されます。

IO 操作を監視します。IO 操作が発生すると、対応するアクションをトリガーします。
このステートメントは正しいです。(チャネルの) IO 操作を監視し、対応するアクションを実行することは確かに選択です。アプリケーション シナリオ、ただし、Select ステートメントが Channel 操作を実行するケースを選択していると誤解しないでください。この理解は間違っています! Select が実際に選択するのは、どのケースでチャネル操作が正常に実行できるかであり、そのケースのコード ブロックが実行されます。

たとえば、チャネル c1 にデータを書き込む場合

c1 := make(chan string, 1)c1 <- "Hello World!"
ログイン後にコピー

次のような Select 判定文があるとします

select {
    case <-c1:
        fmt.Println("Case 1 is selected")
    case c1<-"Hello World!":
        fmt.Println("Case 2 is selected")
    default :
        fmt.Println("Default is selected")}
ログイン後にコピー

以下の結果が得られます

Case 1 is selected
ログイン後にコピー

c1 にはデータが書き込まれているため、「c1 からデータを読み取る」ことができます。つまり、最初のケースは正常に実行できます。したがって、最終的には最初のケースのコード ブロックが実行されます。

以上がgolangにおけるselectの理解についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート