Dev Study
Go コース

31. panic と recover — 異常時の脱出と復帰

panic は、これ以上処理を続けられない異常事態を知らせる仕組みです。panic が起きると現在の関数の実行は止まり、登録済みの defer を実行しながら呼び出し元へさかのぼって伝播し、最後まで止められなければプログラムが異常終了します。配列の範囲外アクセスや nil ポインタのデリファレンスなど、実行時エラーも panic として発生します。

recover は、defer で呼ばれた関数の中でだけ意味を持つ組み込み関数で、進行中の panic を捕まえて伝播を止め、プログラムを正常な流れに戻します。recover() は panic 中なら panic に渡された値を返し、そうでなければ nil を返します。これを使うと、致命的になりかねない状況から復帰してエラーとして扱い直すことができます。

ただし Go では、予期できる失敗(ファイルが無い、入力が不正など)は panic ではなく後述の error で返すのが基本方針です。panic と recover は、本当に異常な状態や、ライブラリの境界で内部エラーを安全なエラー値へ変換するといった限定的な場面で使います。乱用せず、通常のエラー処理と使い分けましょう。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗