言語select文を行きます
選択Goが通信するスイッチのような文に制御構造です。 各ケースは、送信または受信のいずれか、通信動作でなければなりません。
ランダムなケースの実行を実行することができます]を選択します。 実行するには無い場合が存在しない場合場合が実行できるようになるまで、それがブロックされます。 デフォルト句は常に実行する必要があります。
文法
言語選択ステートメントの構文をプログラミング行く次のとおりです。
select { case communication clause : statement(s); case communication clause : statement(s); /* 你可以定义任意数量的 case */ default : /* 可选 */ statement(s); }
以下は、select文の構文について説明します。
- 各ケースは、通信でなければなりません
- すべてのチャネル式が評価されます
- すべての式が評価されるように送信されます
- 通信は、任意であってもよい場合には、実行し、他は無視されます。
- 複数のケースが実行できる場合、選択はランダムに公正実行]を選択します。 その他は実行されません。
それ以外の場合:- デフォルト句がある場合は、ステートメントが実行されます。
- デフォルトの句がない場合は、実行することができる通信まで、ブロックを選択し、再評価値をチャンネルに移動するかではありません。
例
package main import "fmt" func main() { var c1, c2, c3 chan int var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } }
上記のコードは、の結果として実行されます。
no communication