ホームページ > バックエンド開発 > Golang > Go の「recover()」関数は、パニック後に複数の Goroutine を実行し続けるにはどうすればよいでしょうか?

Go の「recover()」関数は、パニック後に複数の Goroutine を実行し続けるにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2024-11-26 08:24:09
オリジナル
807 人が閲覧しました

How Can Go's `recover()` Function Keep Multiple Goroutines Running After a Panic?

クラッシュ時に複数の 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")
    }
}
ログイン後にコピー

説明

  • doPanic は、意図的に
  • protect は関数をゴルーチンとしてラップし、遅延関数を使用してパニックをトラップするヘルパー関数です。
  • メインでは、protect(doPanic) がパニックを示すゴルーチンとして起動されます。

出力

このコードが実行されると、次の出力が行われます:

About to panic
Recovered: test
Tick
Tick
Tick
...
ログイン後にコピー

これは、doPanic が原因で発生したにもかかわらず、パニックが発生した場合、recover() 呼び出しによりプログラムが実行を継続し、他の goroutine が実行を継続できるようになりました。

recover() を使用するとプログラムの実行を継続できますが、根本的なパニックの発生は防止されないことに注意することが重要です。したがって、将来のパニックの再発を防ぐために、パニックの根本原因を特定して対処することが依然として不可欠です。

以上がGo の「recover()」関数は、パニック後に複数の Goroutine を実行し続けるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート