クラッシュ時に複数の goroutine を実行し続ける
Go で複数の goroutine を操作する場合、1 つの goroutine が実行されるシナリオを考慮することが不可欠です。クラッシュまたはパニックが発生し、プログラム全体に影響を与える可能性があります。これを防ぐには、プログラムがこれらの状況を適切に処理し、他の goroutine が実行を継続できるようにする必要があります。
Recover 関数の使用
Go には組み込みの Recovery( ) パニックの処理とパニックからの回復を可能にする機能。この関数を使用するには、遅延関数内で呼び出す必要があります。このようにして、パニックが発生した場合はそれがキャプチャされ、遅延関数の完了後にプログラムが実行を再開します。
recover() の使用方法の例を次に示します。
func doPanic() { fmt.Println("About to panic") panic("test") } func protect(f func()) { defer func() { if err := recover(); err != nil { fmt.Printf("Recovered: %v", err) } }() f() } func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("Tick") } }
説明
出力
このコードが実行されると、次の出力が行われます:
About to panic Recovered: test Tick Tick Tick ...
これは、doPanic が原因で発生したにもかかわらず、パニックが発生した場合、recover() 呼び出しによりプログラムが実行を継続し、他の goroutine が実行を継続できるようになりました。
recover() を使用するとプログラムの実行を継続できますが、根本的なパニックの発生は防止されないことに注意することが重要です。したがって、将来のパニックの再発を防ぐために、パニックの根本原因を特定して対処することが依然として不可欠です。
以上がGo の「recover()」関数は、パニック後に複数の Goroutine を実行し続けるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。