論理的な処理であることが大きなファイルから取られ、そのような大循環がある場合は、この問題を解決するために、コードのロジックは、ループ内のループの各ラインに配置するので、forループが存在してもよいですネストされたロジック、ロシアの人形に似層、後層。あなたが出した場合は、それを配列にデータのサイクルのそれぞれの行を保存したり、スライスする必要がありますが、これは大きなメモリを表します
そして、あなたは十分にネスティングサイクルに対処するために、この技術を使用することができますが、また、大容量のメモリデータ・ソリューションが存在しない占めます
チャネルを作成し、groutineの内部を通ってループするために行ったゴルーチンを開き、データの各行は、チャネルに送信され
、受信機は常に、最初の送信者よりも、この場所の意志を行うため、メインgroutineの内部に、リードチャネルデータブロックは、の到着を待っていること
、それが異なるgroutineの内部で行われるが、常に同期して実行され、ネストされたループの問題を解決しているが、そのような良性の同期動作のように形成
パッケージメイン インポート" FMT " インポート" 時間" FUNCメイン(){ ARR: = [] INT { 1、2、3、4、5、6 } 収率: = メイク(チャンINT ) 移動FUNC(){ 用 _、 I:= レンジARR { // ここで各印刷、アウターループ次にジャンプ FMT .Println(" 循環" 、I) 収率を < - I // これは、高速参照の実行防止の効果が 時間 .sleep(時間.Second) } 閉じる(収率) }() のためのI:= レンジ収率{ FMT .Println(" アウターループ:" 、I) } }
この効果は、
循環 :アウターループ 内部ループ2 :外側のループ2 サイクル内で3 :外側のループ3 内部ループを4 アウターループ:4 内部ループ5 アウターループ:5 内部ループ6 の外側ループ:6
そのチャンネルは、チャンネルがキャッシュを持っている場合は、キャッシュは、最初のチャンネル番号にすべての、ちょうどループ実行の外に、これは中に多くのケースで持っています
収率:= メイク(チャンINT、6 ) 内部ループ1 内のループ2 、ループ内の3 循環4 内部ループ5 内部ループを6 外部ループ: 外側ループ:2 アウターループ:3 外側ループ:4 外側ループ:5 サイクルアウター:6
たとえば、次のコード:
メールボックス:= メイク(チャン* imap.MailboxInfo、20 ) FUNC行く(){ imapClient.List("" 、" * " 、メールボックス) }() // 列取邮件夹 ための M:= 範囲のメールボックス{ Maildir形式 = アペンド(のmaildir、m.Name) }
これは多くの収量、内部および外部通信機能におけるPHPの役割のようなものです