信道

チャネルとは何ですか?

パイプとの間の通信チャネルは、囲碁コルーチンを考えることができます。パイプ内の水は、一方の端部から流出するように、データは、もう一方の端で受信され、一方の端部からチャネルを用いて送信されても​​よいです。

チャンネル声明

すべてのチャンネルがタイプに関連付けられています。唯一のこのトランスポートチャネルデータのタイプ、データ転送の他のタイプは不正です。

チャン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)
    } 
}

おすすめ

転載: www.cnblogs.com/xiongying4/p/12037037.html
おすすめ