Go でパニックを捉える
Golang では、パニックはプログラムの異常終了を引き起こす可能性のある例外的な状態です。デフォルトでは、パニックは実行を停止し、スタック トレースを表示します。ただし、これらのパニックを「キャッチ」して適切に処理することは可能です。
シナリオ:
次のコードを考えてみましょう:
package main import ( "fmt" "os" ) func main() { file, err := os.Open(os.Args[1]) if err != nil { fmt.Println("Could not open file") } fmt.Printf("%s", file) }
ファイル引数が指定されていない場合、9 行目でパニックがスローされます。「パニック: 実行時エラー: インデックスが不足しています」 range."
解決策:
このパニックをキャッチするには、recover() 関数を利用できます。 reverse() を使用すると、ゴルーチンがパニックから回復し、パニック呼び出しに渡された値を返すことができます。
package main import ( "fmt" "os" ) func main() { defer func() { if err := recover(); err != nil { fmt.Println("Error:", err) } }() file, err := os.Open(os.Args[1]) if err != nil { panic(err) } fmt.Printf("%s", file) }
この変更により、コードはパニックをキャッチし、エラー メッセージを出力することで処理できるようになりました。
警告:
パニックは、すべてのエラー処理シナリオにとって理想的な解決策ではありません。 Go の設計哲学は、パニックに依存するのではなく、明示的なエラー チェックを重視しています。ただし、recover() メカニズムは、予期しないパニックを捕捉し、クリーンアップ操作を実行する方法を提供します。
以上がGo でパニックを見つけて対処するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。