ホームページ > バックエンド開発 > Golang > Go でエラーを最適に処理するにはどうすればよいですか?

Go でエラーを最適に処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-27 10:06:10
オリジナル
542 人が閲覧しました

How to Best Handle Errors in Go?

Go の標準エラー変数

Golang には、エラーを処理するための慣用的なアプローチが複数あります。

カスタム エラー変数

作成者は、命名規則 Err.... に従って固定エラー変数を宣言することがよくあります。例:

var (
        ErrSomethingBad = errors.New("some string")
        ErrKindFoo      = errors.New("foo happened")
)
ログイン後にコピー

エラー タイプ

呼び出し元に役立つ特定の情報を含むエラー タイプ (...Error) を宣言することも一般的な方法です。

type SomeError struct {
     // extra information, whatever might be useful to callers
     // (or for making a nice message in `Error()`)
     ExtraInfo int
}
type OtherError string

func (e SomeError) Error() string { /* … */ }
func (e OtherError) Error() string {
        return fmt.Sprintf("failure doing something with %q", string(e))
}
ログイン後にコピー

アドホック エラー

ユーザーが特定のエラーをテストする必要がない場合エラーがある場合は、errors.New.

func SomepackageFunction() error {
        return errors.New("not implemented")
}
ログイン後にコピー

標準パッケージ エラーの使用

io.EOF などの標準パッケージで定義されたエラーを利用できます。 。ただし、一般的には、独自のパッケージ用にカスタム エラーを作成することをお勧めします。

func SomeFunc() error {
        return io.EOF
}
ログイン後にコピー

エラー インターフェイス

エラー インターフェイスを作成すると、特定の動作やタイプを確認できます。

type Error interface {
    error
    Timeout() bool   // Is the error a timeout?
    Temporary() bool // Is the error temporary?
}
ログイン後にコピー

コンテキストエラー

既存のエラーに追加のコンテキストを提供するには、Go 1.13 以降でこの手法を使用します。

func SomepackageFunction() error {
    err := somethingThatCanFail()
    if err != nil {
            return fmt.Errorf("some context: %w", err)
    }
}
ログイン後にコピー

アプローチの選択は、ユーザーが次のエラーをテストする必要があると予想されるかどうかによって異なります。特定のエラーと、複数のユーザーが独自のエラー処理を実装する可能性があります。

以上がGo でエラーを最適に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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