ゴルーチンを正常に終了する
Go では、ゴルーチンは同時実行性を提供し、複数のタスクを同時に実行できます。場合によっては、アプリケーションを正常にシャットダウンする必要がある場合など、ゴルーチンを終了する必要があります。
次のコードを考えてみましょう:
<code class="go">func startsMain() { go main() } func stopMain() { //kill main } func main() { //infinite loop }</code>
このシナリオでは、メインのゴルーチンが実行されます。無限ループになるので、stopMain 関数で停止したいと考えています。これを実現するにはどうすればよいでしょうか?
解決策は、チャネルを使用してゴルーチン間で通信することです。改善されたコード スニペットは次のとおりです。
<code class="go">var quit chan struct{} func startLoop() { quit = make(chan struct{}) go loop() } func stopLoop() { close(quit) } // BTW, you cannot call your function main, it is reserved func loop() { for { select { case <-quit: return // better than break default: // do stuff. I'd call a function, for clarity: do_stuff() } } }</code>
空の構造体の値を保持できる struct{} 型の終了チャネルを導入します。
このメカニズムにより、quit チャネルを通じて goroutine にシグナルを送信することで、無限ループを正常に終了できます。
以上がGo で Goroutine を正常に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。