Java の GetMessage() とは異なり、Go でエラーを効果的に比較して処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-25 21:09:11
オリジナル
125 人が閲覧しました

How Do I Effectively Compare and Handle Errors in Go, Unlike Java's GetMessage()?

Go でのエラー メッセージの比較

Java では、GetMessage() を使用して例外からエラー メッセージを取得できます。ただし、Go では、エラーの種類に対して定義された同等のメソッドはありません。代わりに、カスタム エラー処理手法を使用する必要があります。

カスタム エラー処理

1 つの方法は、必要な特定のエラー メッセージを表すパッケージ レベルの変数を定義することです。をチェックしてください。例:

var errExample = errors.New("this is an example")
ログイン後にコピー

エラーを返すとき、一般的なエラー文字列の代わりにこの変数を使用できます:

if err := some_package.DoSomething(); err != nil {
    if err == errExample {
        // handle it however.
    }
}
ログイン後にコピー

エラー変数のエクスポート

パッケージ外のコードがエラーにアクセスする必要がある場合は、大文字を使用して変数をエクスポートできます。文字:

var ErrExample = errors.New("this is an example")
ログイン後にコピー

これにより、エクスポートされた変数とエラーを比較できます:

if err == somepackage.ErrExample {
    // handle it
}
ログイン後にコピー

  • 絶対ファイルパス: os.ErrNotExist
  • HTTP エラー: net/http.ErrServerClosed
  • データベース エラー:database/sql.ErrNoRows

落とし穴: 文字列を避ける比較

エラーの Error() メソッドによって返された文字列と比較したいという誘惑に抵抗してください。これにより、コードが脆弱になる可能性があります。例:

if err.Error() == "this is an example" {
    // this is not recommended
}
ログイン後にコピー

代わりに、上で概説したカスタム エラー処理アプローチを使用します。

以上がJava の GetMessage() とは異なり、Go でエラーを効果的に比較して処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート