Coroutines for Go のメモ Coroutines for Go を読んでのメモ コルーチンとはなんぞや? 普通の関数コール(サブルーチン)を解説している。 サブルーチンとの比較でコルーチンを語るため。 以下は関数Fが関数Gを読んだという前提。 サブルーチンは、Gが全部終わってからFに戻り、Fの続きを実行するモデル、である。 1つのスタックのトップにある1つの関数のみが実行状態となる。 コルーチンでは、FとGが異なるスタックになるが、実行状態になるのはサブルーチンと同じく1つの関数である。 Gはすぐには実行状態にならず、Fにより明示的にresumeする必要がある。 GはいつでもFに譲る(yield)ことができ、Gはスタックを維持したまま一時停止する 再度FがGをresumeすることでGは実行を再開する。 Gが最後まで到達した後に、Fがresumeしたらそれは失敗になる必要があ