Golang でのエラー処理: エラーの非表示を避ける

WBOY
リリース: 2023-08-07 10:24:19
オリジナル
587 人が閲覧しました

Golang でのエラー処理: エラーの非表示を避ける

はじめに:
エラーは、プログラミング プロセスでよく遭遇する問題の 1 つです。エラー処理方法が正しいかどうかは、プログラムの信頼性と安定性に直接影響します。 Golang では、特に外部インターフェイスを呼び出したり、複雑なロジックを処理する必要があるプログラムを作成する場合、エラー処理は重要なタスクです。この記事では、隠れたエラーを回避し、プログラムをより堅牢にする方法に焦点を当てます。

  1. エラー タイプの定義と使用

Golang では、エラー タイプをカスタマイズできます。エラー タイプを定義するときは、通常、error インターフェイスの要件を満たす必要があります。つまり、そのタイプは Error() string メソッドを実装する必要があります。このようにして、実際のビジネス ニーズに基づいてさまざまなエラー タイプを定義できます。

以下は、カスタム エラー タイプを定義する簡単な例です。MyError:

type MyError struct {
    Msg string  // 错误信息
    Code int    // 错误码
}

func (e *MyError) Error() string {
    return fmt.Sprintf("Error: %s, Code: %d", e.Msg, e.Code)
}
ログイン後にコピー

コード内でこのエラー タイプを使用して、特定のエラーを表すことができます。たとえば、関数の戻り結果の処理中にエラーが発生した場合、MyError タイプのエラーが返されます。

func doSomething() error {
    // 执行一些操作,可能会发生错误
    // 如果发生错误,返回一个 MyError
    return &MyError{
        Msg: "Something went wrong",
        Code: 500,
    }
}
ログイン後にコピー

この関数を呼び出すと、if ステートメントを使用してエラーが発生したかどうかを判断できます。エラーが発生した場合、型アサーションを通じて特定のエラー情報を取得できます。

err := doSomething()
if err != nil {
    if myErr, ok := err.(*MyError); ok {
        fmt.Printf("Error: %s, Code: %d
", myErr.Msg, myErr.Code)
    } else {
        fmt.Println(err)
    }
}
ログイン後にコピー
  1. エラー処理のための連鎖呼び出し

Golang では、errors パッケージで提供される New()## を使用できます。 # 単純なエラーを作成する関数。

err := errors.New("Something went wrong")
ログイン後にコピー

その後、

Wrap() 関数を使用して、追加のコンテキスト情報を追加しながら、このエラーを新しいエラーにラップできます。

err = errors.Wrap(err, "Failed to do something")
ログイン後にコピー

このようにして、エラー処理中にエラーの原因を段階的に追跡できます。以下は、エラー処理のための呼び出しの連鎖を示す例です。

func doSomething() error {
    err := doSomethingElse()
    if err != nil {
        return errors.Wrap(err, "Failed to do something")
    }
    return nil
}

func doSomethingElse() error {
    // 执行一些操作,可能会发生错误
    // 如果发生错误,返回一个简单的错误
    return errors.New("Something went wrong")
}
ログイン後にコピー

チェーン呼び出しに対処する場合、

Cause() 関数を使用して最初に発生したエラーを取得できるため、さまざまな種類のエラーを処理できます。

err := doSomething()
if err != nil {
    rootErr := errors.Cause(err)
    if myErr, ok := rootErr.(*MyError); ok {
        fmt.Printf("Error: %s, Code: %d
", myErr.Msg, myErr.Code)
    } else {
        fmt.Println(err)
    }
}
ログイン後にコピー
    エラー処理のベスト プラクティス
    エラーを無視しない: コードを作成するときは、発生する可能性のあるエラーを無視しないでください。操作が失敗する可能性は低いと考えられる場合でも、コードにエラー処理を実装する必要があります。これにより、潜在的な問題の隠蔽が回避され、プログラムの堅牢性が保証されます。
  • エラーをできるだけ早く処理する: プログラムの実行中、エラーはできるだけ早く処理する必要があります。エラーの処理を最後まで延期しないでください。これにより、より深刻な結果が発生し、エラーの原因の追跡が困難になる可能性があります。
  • 意味のあるエラー情報を提供する: カスタム エラー タイプを定義するときは、その後のエラー処理とデバッグを容易にするために、エラー メッセージに意味のある説明を提供する必要があります。エラー メッセージには、問題の迅速な特定と解決に役立つ、エラーの特定の場所や原因などの情報が含まれている場合があります。
結論:

Golang では、エラー処理は重要なタスクです。エラー タイプを定義して使用し、エラー処理の呼び出しを連鎖することにより、隠れたエラーをより適切に回避し、プログラムをより堅牢で信頼性の高いものにすることができます。同時に、適切なエラー処理の習慣により、コードの保守性と可読性が向上し、その後のメンテナンスとアップグレードが容易になります。

以上がGolang でのエラー処理: エラーの非表示を避けるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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