ゴルーチンが実行されないのはなぜですか?
Go プログラミングの分野では、ゴルーチンは同時実行のための強力なメカニズムを提供します。ただし、これらの goroutine が応答していないように見える場合があり、開発者が混乱状態に陥ることがあります。
シナリオ:
goroutine を作成して送信しようとする次の Go コードについて考えてみましょう。チャネル経由のメッセージ:
<code class="go">package main import "fmt" func main(){ messages := make(chan string,3) messages <- "one" messages <- "two" messages <- "three" go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages) fmt.Println("Done!") }</code>
このコードを実行すると、出力は驚くかもしれません:
Done!
問題:
にもかかわらずgoroutine を作成しても、コードはその中のステートメントを実行しません。理由はメインプログラムの終了にあります。 Go では、ゴルーチンは main 関数とは独立して実行されます。メイン プログラムが終了すると、実行する機会がなかった場合でも、実行中のゴルーチンはすべて終了します。
解決策:
ゴルーチンが途中で終了しないようにするには、ゴルーチンが作業を完了するまでメイン プログラムを存続させておく必要があります。これを実現するには、いくつかのアプローチがあります。
推奨事項:
ゴルーチンの動作と並行性をより包括的に理解するにはGo、Golang ブログの優れたブログ投稿「Go の同時実行性」を読むことを強くお勧めします。
以上がGoroutine が実行前に終了してしまうのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。