Maison > développement back-end > Golang > Gestion des erreurs dans Golang : évitez de masquer les erreurs

Gestion des erreurs dans Golang : évitez de masquer les erreurs

WBOY
Libérer: 2023-08-07 10:24:19
original
632 Les gens l'ont consulté

Gestion des erreurs dans Golang : évitez de masquer les erreurs

Introduction :
Les erreurs sont l'un des problèmes que nous rencontrons souvent dans le processus de programmation. Le fait que la méthode de gestion des erreurs soit correcte affecte directement la fiabilité et la stabilité du programme. Dans Golang, la gestion des erreurs est une tâche importante, en particulier lorsque nous écrivons des programmes qui doivent appeler des interfaces externes ou gérer une logique complexe. Cet article se concentrera sur la façon d'éviter les erreurs cachées et de rendre nos programmes plus robustes.

  1. Définition et utilisation des types d'erreur

Dans Golang, les types d'erreur peuvent être personnalisés. Lors de la définition d'un type d'erreur, il doit généralement répondre aux exigences de l'interface error, c'est-à-dire que le type doit implémenter la méthode Error() string. De cette façon, nous pouvons définir différents types d’erreurs en fonction des besoins réels de l’entreprise. 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)
}
Copier après la connexion

我们可以在代码中使用这个错误类型来表示特定的错误。比如,在处理某个函数的返回结果时,如果发生了错误,就返回一个 MyError 类型的错误。

func doSomething() error {
    // 执行一些操作,可能会发生错误
    // 如果发生错误,返回一个 MyError
    return &MyError{
        Msg: "Something went wrong",
        Code: 500,
    }
}
Copier après la connexion

当我们调用这个函数时,可以使用 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)
    }
}
Copier après la connexion
  1. 错误处理的链式调用

在Golang中,我们可以使用 errors 包提供的 New() 函数来创建一个简单的错误。

err := errors.New("Something went wrong")
Copier après la connexion

然后,我们可以使用 Wrap() 函数将这个错误包装成一个新的错误,同时添加额外的上下文信息。

err = errors.Wrap(err, "Failed to do something")
Copier après la connexion

这样,我们就可以在错误处理的时候一步步追踪错误发生的原因。下面是一个例子,演示了错误处理的链式调用。

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")
}
Copier après la connexion

当我们处理链式调用时,可以使用 Cause()

Ce qui suit est un exemple simple qui définit un type d'erreur personnalisé MyError :
    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)
        }
    }
    Copier après la connexion
  1. Nous pouvons utiliser ce type d'erreur dans le code pour représenter des erreurs spécifiques. Par exemple, si une erreur survient lors du traitement du résultat de retour d'une fonction, une erreur de type MyError sera renvoyée.
  2. rrreeeLorsque nous appelons cette fonction, nous pouvons utiliser l'instruction if pour déterminer si une erreur s'est produite. Si une erreur se produit, nous pouvons obtenir des informations d'erreur spécifiques via des assertions de type.
      rrreee
    1. Appels enchaînés pour la gestion des erreurs
    2. Dans Golang, nous pouvons utiliser la fonction New() fournie par le package errors pour Créez une erreur simple.
    3. rrreee
    4. Nous pouvons ensuite utiliser la fonction Wrap() pour envelopper cette erreur dans une nouvelle erreur tout en ajoutant des informations contextuelles supplémentaires. rrreee

      De cette façon, nous pouvons suivre la cause de l'erreur étape par étape lors du traitement des erreurs. Vous trouverez ci-dessous un exemple illustrant le chaînage des appels pour la gestion des erreurs.
      rrreee

      Lorsque nous traitons d'appels en chaîne, nous pouvons utiliser la fonction Cause() pour obtenir l'erreur qui s'est produite à l'origine afin de pouvoir gérer différents types d'erreurs. 🎜rrreee🎜🎜Meilleures pratiques pour la gestion des erreurs🎜🎜🎜🎜N'ignorez pas les erreurs : lors de l'écriture du code, n'ignorez aucune erreur qui peut survenir. Même si vous pensez qu'il est peu probable qu'une opération se déroule mal, vous devez quand même implémenter la gestion des erreurs dans votre code. Cela évite de cacher des problèmes potentiels et garantit la robustesse du programme. 🎜🎜Gérer les erreurs le plus tôt possible : lors de l'exécution du programme, les erreurs doivent être traitées le plus tôt possible. Ne retardez pas le traitement des erreurs jusqu'à la fin, car cela pourrait entraîner des conséquences plus graves et rendre difficile la recherche de la cause de l'erreur. 🎜🎜Fournir des informations d'erreur significatives : lors de la définition d'un type d'erreur personnalisé, vous devez fournir une description significative du message d'erreur afin de faciliter la gestion des erreurs et le débogage ultérieurs. Le message d'erreur peut contenir des informations telles que l'emplacement spécifique et la cause de l'erreur pour aider à localiser et à résoudre rapidement le problème. 🎜🎜🎜Conclusion : 🎜Dans Golang, la gestion des erreurs est une tâche importante. En définissant et en utilisant des types d'erreurs et en enchaînant les appels pour la gestion des erreurs, nous pouvons mieux éviter les erreurs cachées et rendre le programme plus robuste et fiable. Dans le même temps, de bonnes habitudes de gestion des erreurs peuvent également améliorer la maintenabilité et la lisibilité du code, et faciliter la maintenance et les mises à niveau ultérieures. 🎜

    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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal