[実行]は、外部通信チャネル循環ダクトを用いて形成されています

論理的な処理であることが大きなファイルから取られ、そのような大循環がある場合は、この問題を解決するために、コードのロジックは、ループ内のループの各ラインに配置するので、forループが存在してもよいですネストされたロジック、ロシアの人形に似層、後層。あなたが出した場合は、それを配列にデータのサイクルのそれぞれの行を保存したり、スライスする必要がありますが、これは大きなメモリを表します

そして、あなたは十分にネスティングサイクルに対処するために、この技術を使用することができますが、また、大容量のメモリデータ・ソリューションが存在しない占めます

チャネルを作成し、groutineの内部を通ってループするために行ったゴルーチンを開き、データの各行は、チャネルに送信され
、受信機は常に、最初の送信者よりも、この場所の意志を行うため、メインgroutineの内部に、リードチャネルデータブロックは、の到着を待っていること
、それが異なるgroutineの内部で行われるが、常に同期して実行され、ネストされたループの問題を解決しているが、そのような良性の同期動作のように形成

パッケージメイン

インポート" FMT " 

インポート" 時間" 

FUNCメイン(){ 
    ARR: = [] INT { 123456 } 
    収率: = メイク(チャンINT 
    移動FUNC(){ 
         _、 I:= レンジARR {
             // ここで各印刷、アウターループ次にジャンプ
            FMT .Println(" 循環" 、I)
            収率を < - I
            // これは、高速参照の実行防止の効果が
            時間 .sleep(時間.Second)
        } 
        閉じる(収率)
    }()
    のためのI:= レンジ収率{
         FMT .Println(" アウターループ:" 、I)
    } 
}

この効果は、

循環
:アウターループ
内部ループ2 
:外側のループ2 
サイクル内で3 
:外側のループ3 
内部ループを4 
アウターループ:4 
内部ループ5 
アウターループ:5 
内部ループ6 
の外側ループ:6

そのチャンネルは、チャンネルがキャッシュを持っている場合は、キャッシュは、最初のチャンネル番号にすべての、ちょうどループ実行の外に、これは中に多くのケースで持っています

収率:= メイク(チャンINT6 
内部ループ1 
内のループ2 
、ループ内の3 
循環4 
内部ループ5 
内部ループを6 
外部ループ:
外側ループ:2 
アウターループ:3 
外側ループ:4 
外側ループ:5 
サイクルアウター:6

たとえば、次のコード:

    メールボックス:= メイク(チャン* imap.MailboxInfo、20 
    FUNC行く(){ 
        imapClient.List("" " * " 、メールボックス)
    }()
    // 列取邮件夹
    ための M:= 範囲のメールボックス{ 
        Maildir形式 = アペンド(のmaildir、m.Name)
    }

これは多くの収量、内部および外部通信機能におけるPHPの役割のようなものです

 

おすすめ

転載: www.cnblogs.com/taoshihan/p/11913961.html