Go で関数例外を処理するためのベスト プラクティスは、パニックの使用を避け、代わりにエラー オブジェクトを返してより詳細な情報を提供することです。遅延と回復を使用してリソースを安全に閉じ、パニックをキャッチして処理します。カスタム エラー タイプを使用して、より具体的で読みやすいエラー メッセージを提供します。エラーをラップして、より詳細な情報を提供します。エラーの重大度に基づいて適切なアクションを実行してください。エラー処理ロジックをカバーする単体テストを作成します。
#Go での関数例外処理のベスト プラクティス
例外処理の基本原則
Go では、例外処理は次の基本原則に従います。 の使用は避けてください。
panic を使用すると、プログラムがエラーですぐに終了しますが、これはほとんどの状況にとって理想的ではありません。
と
recover を使用します:
defer を使用すると、関数が戻る前にクリーンアップを実行できます。 #recover
パニックが発生したときにエラーをキャッチできます。
ファイルを開いて読み取り、その内容を標準出力に出力する次の関数を考えてみましょう:
func readFile(filename string) { f, err := os.Open(filename) if err != nil { panic(err) } defer f.Close() data, err := ioutil.ReadAll(f) if err != nil { panic(err) } fmt.Println(string(data)) }
ベスト プラクティスの適用
この機能を改善するためにベスト プラクティスを適用しましょう:
を使用します:
エラーが発生する可能性のある操作 (ファイルを開いたり読み取ったりするなど) については、defer # を使用してください。 ## と
recover を使用してファイルを安全に閉じ、パニックが発生した場合にエラー メッセージを出力します。
改善された機能は次のとおりです:
func readFile(filename string) error { f, err := os.Open(filename) if err != nil { return err } defer func() { if err := recover(); err != nil { fmt.Println("Error:", err) } if err := f.Close(); err != nil { fmt.Println("Error closing file:", err) } }() data, err := ioutil.ReadAll(f) if err != nil { return err } fmt.Println(string(data)) return nil }
カスタム エラー タイプを使用します:
カスタム エラー タイプを定義して、より具体的で読みやすいエラー メッセージを提供します。以上がgolang 関数での例外処理のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。