Maison >développement back-end >Golang >Comment gérer plusieurs erreurs simultanément dans Golang ?

Comment gérer plusieurs erreurs simultanément dans Golang ?

王林
王林original
2024-06-05 22:47:00841parcourir

La façon de gérer plusieurs erreurs simultanément dans Go est d'utiliser des erreurs. Il s'agit de vérifier si l'erreur est l'erreur sous-jacente d'une autre erreur. Utilisez error.As pour convertir les erreurs en un type spécifique si possible. Utilisez error.MultiError pour créer un objet ErrorGroup contenant plusieurs erreurs. Parcourez le ErrorGroup, en effectuant des actions spécifiques pour chaque type d’erreur.

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

Comment gérer plusieurs erreurs simultanément dans Golang ?

La gestion de plusieurs erreurs simultanément dans Golang est obtenue en utilisant les fonctions errors.Is et errors.As. errors.Is vérifie si une erreur est l'erreur sous-jacente d'une autre erreur, tandis que errors.As force une erreur vers un autre type et renvoie true si la conversion réussit. FAUX. 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

🎜Utilisation : 🎜🎜
  1. 🎜🎜 Déterminer s'il s'agit d'une erreur sous-jacente 🎜🎜rrreee
  2. 🎜🎜 Forcer la conversion vers un type spécifique 🎜🎜rrreee
🎜🎜 Cas pratique : 🎜🎜🎜Supposons qu'il existe une fonction qui doit appeler plusieurs fonctions externes et que chaque fonction peut renvoyer une erreur. Pour gérer toutes ces erreurs en même temps, vous pouvez utiliser errors.MultiError pour créer un multiError dans une fonction, puis appeler les fonctions individuelles et ajouter les erreurs renvoyées à multiError >Moyen. 🎜rrreee🎜 Plusieurs erreurs peuvent être facilement gérées simultanément dans Golang en utilisant les fonctions errors.MultiError et errors.Is/errors.As. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn