Go の軽量スレッドであるゴルーチンは、同時実行性と非同期性を強化します。ただし、ルーチンのパニックによりプログラムの安定性が損なわれる可能性があります。この記事では、ゴルーチンのパニックから回復して Sentry や Raygun などのクラッシュ報告サービスにエラー レポートを送信する方法について説明します。
問題:
子ゴルーチンからのパニックをどのようにキャプチャできるかエラーを容易にするためにメインルーチン内で報告しますか?
答え:
ゴルーチンは、他のゴルーチンのパニックから回復できません。慣用的な解決策は、遅延関数を使用して、recover() 呼び出しを子ゴルーチンに挿入することです。
パニックを回復する慣用的な方法:
ラッパー関数の使用例:
func wrap(f func()) { defer func() { if r := recover(); r != nil { fmt.Println("Caught:", r) } }() f() }
使用法:
go wrap(func() { panic("catch me") })
ラッパー関数の利点アプローチ:
注:
パニックは、発生した goroutine 内で処理する必要があります。ラッパー関数を使用すると回復できますが、ゴルーチンは終了したままです。
以上がGo ゴルーチンのパニックから回復し、Sentry などのサービスにエラーを報告するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。