コルーチンと `goto`の違い?
解決
ゴルーチンジャンプと同じではない - それらは主コードと並行して実行します。あなたは http://golang.org/doc/effective_go.htmlで彼らの例から(のようなものを述べるときA>)
go list.Sort(); // run list.Sort in parallel; don't wait for it.
メインライン・コードは上続けて - それは最後まで、ソートを待ちません。ソート・ルーチンは、実行の独自の軽量スレッド上で起動し、それが並べ替えを完了すると、そのスレッドが終了する。
A後藤は、メインライン・コードは別の実行パスに分岐させるような - そうgoto
後のステートメントが実行を取得することはありませんでしょう。
他のヒント
主な違いは、それらをサポートする言語でgoto
文がほとんど、あるいは全く制限してプログラム内の任意の場所にジャンプできるようにということです。表面上のコルーチンかもしれないが、似たように見えるが、それらは非常に異なっています。
コルーチンは、(すべてのコンテキストで)手順が中断されることを可能にするとの特定のの位置で再開しました。だから、コルーチンが一時停止してyield
制御を他の手順を、彼らが完全に前にして、後で再開行いながら、手続きが降伏してから再開する点は事前に知られています。
これは、単に手順の任意の行にジャンプすることができない、問題の手順は、特定の位置で再開されるのを待っている必要があります。この制御の受け渡しがはるかに構造化されたgoto
と比べてですが、この強力なメカニズムを乱用による混乱のコードを記述することが可能です。その後、再び、それはすべての強力なプログラミング言語機能付きでない場合ということですか? ; - )
所属していません StackOverflow