チャンTは、T型チャネルを表します。
チャンネルゼロはゼロです。チャンネルのゼロ値は全く使用されていない、それは地図上のようにする必要がありますと行わslicedが、チャネルを定義するために利用します。
< - 1 //が配置され内部を示す1件の。
B: = <-a //値を取り出し、Bに割り当てられました
以下のための主要なパッケージ変更 のインポート( " FMT " " 時間" ) FUNCテスト(Aちゃんのint){ fmt.Println(" こんにちは!" ) //はの値置く time.sleep(time.Second * 3) // 3秒後に睡眠を次いで、Bの値に印刷。< - 1 //が内部に配置され表す1。 } FUNC主が(){ VARチャンint型 =メイク(チャンINTを) // 注:初期化するために必ず 移動試験() Bが: = < - // 取り出した値を、Bに割り当てられ fmt.Println(B) }
デフォルト値および割り当てがブロックされています。データ伝送チャネルへのGoコルーチンは、合理的な存在になります場合は、他のコルーチンGoがデータを受信すると言うこと。そうでない場合、プログラムは、実行時にデッドロックの形成をパニックの引き金となるでしょう。
より多くのコルーチンGoは、チャネルからのデータを受信することがある場合は同様に、我々は別のコルーチンが書き込みデータチャネルに行きます、または他のプログラムがパニックを誘発することを期待しています。
メインパッケージ {メインFUNC() : = メイクを(チャンINT) - 5 < }
sendData FUNC(sendchチャン< - INT){ //チャン< - INTがエラーかどうチャネルを読み取り、書き込み専用である sendch 10 - < } FUNCメイン(){ // のみ書き込みチャネル sendch: = メイク(チャンint型) のsendData(sendch)行く fmt.Printlnを( < - sendch) }
データの送信者には、チャネルデータが送信されないことを受信者に通知する、チャネルを閉じることができます。
データがチャネルから受信した場合、受信者は、チャネルが閉じられているかどうかをチェックするために多変数を使用することができます。
パッケージメイン インポート( " FMT " ) {FUNCプロデューサー(CHNLチャンINT) のための I:= 0; I <10; I ++ { CHNL < - I } 閉じる(CHNL) } FUNCメイン(){ CH: = メイク(チャンINT ) ゴープロデューサー(CH) について{ V、OK: = < - CH // チャネルが閉じている場合は、[OK]をfalseにある // 閉じていない場合は、trueにされている IF OK == falseの{に BREAK } fmt.Println(「受信" 、V、OK) } }
FUNCプロデューサ(CHNLチャンINT){ 用 I:= 0; I <10; I ++ { CHNL < - I } 近い(CHNL) } メインFUNC(){ CH: = メイク(チャンINT) プロデューサー(CH)を移動 するために、V:= レンジCH { fmt.Printlnは(" 受信" 、V) } }