Golang 関数のエラー処理のパターンとアンチパターン

王林
リリース: 2024-04-24 13:30:01
オリジナル
811 人が閲覧しました

Go 関数のエラー処理モードには、errors.New() を使用してエラーを作成すること、基礎となるエラーをラップすること、エラーがないことを示す nil を返すことなどが含まれます。アンチパターンには、マジック ナンバーまたは文字列を使用してエラーを表すこと、暗黙的にエラーを処理すること、エラーを無視すること、遅延終了パターンが含まれます。ベスト プラクティス: エラーを作成して返すには、errors.New() を使用します。アンチパターンの例: os.Open() によって返されるエラーを無視します。ベスト プラクティスに従い、アンチパターンを回避すると、明確で保守しやすく、デバッグしやすいコードが得られます。

Golang 関数のエラー処理のパターンとアンチパターン

Go 関数のエラー処理のパターンとアンチパターン

Go でエラーを処理する場合、さまざまな方法があります。 。ただし、すべてのモデルが理想的であるわけではありません。この記事では、Go での関数エラー処理のベスト プラクティスとアンチパターンを検討し、それらを示す実際の例を示します。

ベスト プラクティス:

  • ##Useerrors.New()エラーの作成:これは作成です。新しいエラーの共通メソッド。簡潔な説明を含むerror値を返します。
  • エラーを基になるエラーでラップする:関数がエラーを受け取った場合、そのエラーを新しいエラーでラップして、エラーの原因に関する詳細なコンテキストを提供できます。
  • エラーがないことを示すにはnilを返します:関数でエラーが発生しなかった場合、関数はnilを返す必要があります。
  • グローバル エラー変数は使用しないでください:グローバル エラー変数を使用すると、競合状態が発生し、コードのデバッグが困難になる可能性があります。
  • エラーの処理:すべてのエラーは無視されるのではなく、関数内で処理される必要があります。理想的には、関数が失敗したことを示すエラーが返されるべきです。

アンチパターン:

  • マジック ナンバーまたは固定文字列を使用してエラーを表現します:コードが難しくなる可能性がありますメンテナンスと拡張機能。
  • エラーの暗黙的な処理:エラーが発生するため、エラーをチェックして直接返すためにif err != nil { ... }を使用しないでください。難しいトラックを扱う。
  • エラーを無視する:エラーが発生する可能性は低いと思われる場合でも、常にエラーを処理してください。
  • 遅延終了モードを使用する:関数の最後にif err != nil { return err }パターンを使用すると、コードの読み取りと保守が困難になります。 。

実際のケース:

ベスト プラクティス:次の関数は、errors.New()を使用して新しいエラー。呼び出し元にファイルのオープンに失敗したことを示すためにそれを返します:

func OpenFile(path string) (*os.File, error) { f, err := os.Open(path) if err != nil { return nil, errors.New("failed to open file: " + err.Error()) } return f, nil }
ログイン後にコピー

アンチパターン:次の関数は、os によって返されたエラーを処理しません。 .Open(): プログラムがクラッシュする可能性があります:

func OpenFile(path string) *os.File { f, _ := os.Open(path) return f }
ログイン後にコピー

この記事で説明されているベスト プラクティスに従い、アンチパターンを回避することで、明確で保守しやすく、簡単なコードを作成できます。デバッグするために。

以上がGolang 関数のエラー処理のパターンとアンチパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!