ホームページ  >  記事  >  バックエンド開発  >  Golang で複数のエラーを同時に処理するにはどうすればよいですか?

Golang で複数のエラーを同時に処理するにはどうすればよいですか?

王林
王林オリジナル
2024-06-05 22:47:00774ブラウズ

Go で複数のエラーを同時に処理する方法は、errors を使用することです。エラーが別のエラーの基礎となるエラーであるかどうかを確認することです。可能であれば、errors.As を使用してエラーを特定の型にキャストします。複数のエラーを含む ErrorGroup オブジェクトを作成するには、errors.MultiError を使用します。 ErrorGroup を反復処理して、エラーの種類ごとに特定のアクションを実行します。

如何在 Golang 中同时处理多个错误?

Golang で複数のエラーを同時に処理するにはどうすればよいですか?

Golang で複数のエラーを同時に処理するには、errors.Is 関数と errors.As 関数を使用します。 errors.Is は、エラーが別のエラーの基礎となるエラーであるかどうかを確認します。一方、errors.As は、エラーを別の型に強制し、変換が成功した場合は true を返し、それ以外の場合は返します。間違い。 errors.Iserrors.As函数来实现的。errors.Is检查一个错误是否为另一个错误的底层错误,而errors.As将一个错误强制转换为另一个类型,如果转换成功则返回true,否则返回false。

用法:

  1. 确定是否为底层错误

    var err error
    
    // 检查 err 是否为 os.ErrNotExist 的底层错误
    if errors.Is(err, os.ErrNotExist) {
        // 处理 os.ErrNotExist 错误
    }
  2. 强制转换为特定类型

    if errors.As(err, &someError) {
        // err 可以转换为 someError 类型
    }

实战案例:

假设有一个函数需要调用多个外部函数,每个函数都可能返回一个错误。为了同时处理所有这些错误,可以在函数中使用errors.MultiError创建multiError,然后调用各个函数并将返回的错误添加到multiError中。

import "golang.org/x/xerrors"

func main() {
    // 创建 MultiError
    multiError := errors.MultiError(nil)

    // 调用外部函数并添加错误
    err := f1()
    if err != nil {
        multiError = multiError.Append(err)
    }
    err = f2()
    if err != nil {
        multiError = multiError.Append(err)
    }

    // 处理 MultiError
    if multiError != nil {
        switch {
        case errors.Is(multiError, os.ErrNotExist):
            // 处理 os.ErrNotExist 错误
        case errors.Is(multiError, someError):
            // 处理 someError 错误
        default:
            // 处理其他错误
        }
    }
}

func f1() error {
    return os.Open("no-such-file")
}

func f2() error {
    return someError{err: "some error"}
}

// 自定义错误类型
type someError struct {
    err string
}

func (e someError) Error() string {
    return e.err
}

通过使用errors.MultiErrorerrors.Is/errors.As

🎜使用法: 🎜🎜
  1. 🎜🎜 根本的なエラーかどうかを判断する🎜🎜rrreee
  2. 🎜🎜 特定の型への変換を強制する🎜🎜rrreee
🎜🎜 実際のケース: 🎜🎜🎜 複数の外部関数を呼び出す必要がある関数があり、各関数がエラーを返す可能性があると仮定します。これらすべてのエラーを同時に処理するには、関数内で errors.MultiError を使用して multiError を作成し、個々の関数を呼び出して、返されたエラーを multiError >中。 🎜rrreee🎜 errors.MultiError 関数と errors.Is/errors.As 関数を使用すると、Golang で複数のエラーを同時に簡単に処理できます。 🎜

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。