連続実行を保証するためのゴルーチンでのパニックの処理
Go では、ゴルーチンは軽量の同時実行メカニズムを提供します。ただし、1 つの goroutine がクラッシュまたはパニックになると、デフォルトの動作ではプログラム全体が終了します。これは、クラッシュした goroutine に関係のない他の goroutine の実行を維持したい場合に問題となる可能性があります。
この問題に対処するには、組み込みの reverse() 関数を遅延関数と組み合わせて利用できます。 reverse() 関数を使用すると、パニックから回復し、パニックが発生したゴルーチン内のプログラムの制御を取り戻すことができます。これを実現する方法は次のとおりです。
回復メカニズムを組み込んだコード スニペットの更新バージョンは次のとおりです:
func main() { // Create a separate goroutine for recovery go func() { defer func() { if err := recover(); err != nil { log.Printf("Recovered: %v", err) } }() // Wrap the potentially panicking functions in deferred function go func() { defer recover() queue.ConsumeAndDoSomething() }() go func() { defer recover() api.StartServer() }() }() // Block indefinitely to keep the program running <-make(chan struct{}) }
この回復メカニズムを実装することで、1 つのゴルーチンがパニックになった場合でも、他のゴルーチンの実行が影響を受けないようにします。プログラムは実行を継続し、パニックを適切に処理して、より回復力のある実行環境を提供します。
以上が単一の Goroutine パニックによって Go プログラム全体がクラッシュするのを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。