Maison  >  Article  >  développement back-end  >  Modèles et anti-modèles de gestion des erreurs de la fonction Golang

Modèles et anti-modèles de gestion des erreurs de la fonction Golang

王林
王林original
2024-04-24 13:30:01812parcourir

Les modes de gestion des erreurs de la fonction Go incluent : l'utilisation d'erreurs.New() pour créer des erreurs, l'encapsulation des erreurs sous-jacentes et le retour de zéro pour indiquer qu'il n'y a aucune erreur. Les anti-modèles incluent : l'utilisation de nombres magiques ou de chaînes pour représenter les erreurs, la gestion implicite des erreurs, l'ignorance des erreurs et les modèles de sortie retardée. Bonne pratique : utilisez error.New() pour créer et renvoyer des erreurs. Exemple d'anti-modèle : ignorez les erreurs renvoyées par os.Open(). Suivre les meilleures pratiques et éviter les anti-modèles permet d'obtenir un code clair, maintenable et facile à déboguer.

Modèles et anti-modèles de gestion des erreurs de la fonction Golang

Modèles et anti-modèles de gestion des erreurs de la fonction Go

Quand il s'agit de gérer les erreurs dans Go, il existe de nombreuses façons de le faire. Cependant, tous les modèles ne sont pas idéaux. Cet article explorera les meilleures pratiques et les anti-modèles pour la gestion des erreurs de fonction dans Go, et fournira des exemples concrets pour les démontrer.

Meilleure pratique :

  • Utilisez errors.New() pour créer des erreurs : C'est la manière la plus courante de créer une nouvelle erreur, qui renvoie un erreur.
  • errors.New() 创建错误:这是一个创建新错误的最常见方法,它可以返回带有简洁描述的 error 值。
  • 用底层错误包装错误:如果一个函数接到一个错误,可以将其包装在一个新的错误中,以提供关于错误来源的更多上下文。
  • 返回 nil 表示没有错误:如果函数未遇到错误,则应返回 nil
  • 不要使用全局错误变量:使用全局错误变量会产生竞争条件,并使代码难以调试。
  • 处理错误:所有错误都应在函数中处理,而不是将其忽略。理想情况下,应返回错误指示函数失败。

反模式:

  • 使用魔数或固定的字符串表示错误:这会使代码难以维护和扩展。
  • 隐式处理错误:不要使用 if err != nil { ... } 来检查错误,然后直接返回,因为这会使错误处理难以跟踪。
  • 忽略错误:始终处理错误,即使你认为它们不太可能发生。
  • 使用延迟退出模式:在函数末尾使用 if err != nil { return err } 的模式会使代码难以阅读和维护。

真实案例:

最佳实践:以下函数使用 errors.New() 创建一个新的错误,并返回它以向调用者指示文件打开失败:

func OpenFile(path string) (*os.File, error) {
    f, err := os.Open(path)
    if err != nil {
        return nil, errors.New("failed to open file: " + err.Error())
    }
    return f, nil
}

反模式:以下函数没有处理 os.Open()

Encapsuler les erreurs avec les erreurs sous-jacentes :

Si une fonction reçoit une erreur, elle peut être enveloppée dans une nouvelle erreur pour fournir plus de contexte sur la source de l'erreur.

🎜Renvoyer nil pour indiquer aucune erreur : 🎜Si la fonction n'a rencontré aucune erreur, elle doit renvoyer nil. 🎜🎜N'utilisez pas de variables d'erreur globales : 🎜L'utilisation de variables d'erreur globales peut créer des conditions de concurrence critique et rendre le code difficile à déboguer. 🎜🎜Gestion des erreurs : 🎜Toutes les erreurs doivent être traitées dans la fonction plutôt qu'ignorées. Idéalement, une erreur devrait être renvoyée indiquant que la fonction a échoué. 🎜🎜Anti-modèle : 🎜🎜🎜🎜🎜Utilisation de nombres magiques ou de chaînes fixes pour représenter les erreurs : 🎜Cela peut rendre le code difficile à maintenir et à étendre. 🎜🎜Gestion implicite des erreurs : 🎜N'utilisez pas if err != nil { ... } pour vérifier les erreurs puis revenir directement, car cela rendrait la gestion des erreurs difficile à piste. 🎜🎜Ignorer les erreurs : 🎜Toujours gérer les erreurs, même si vous pensez qu'il est peu probable qu'elles se produisent. 🎜🎜Utilisez un modèle de sortie retardée : 🎜Utiliser le modèle if err != nil { return err } à la fin d'une fonction peut rendre le code difficile à lire et à maintenir. 🎜🎜Cas réel : 🎜🎜🎜🎜Bonne pratique : 🎜La fonction suivante utilise errors.New() pour créer une nouvelle erreur et la renvoyer à l'appelant Indique que l'ouverture du fichier a échoué : 🎜
func OpenFile(path string) *os.File {
    f, _ := os.Open(path)
    return f
}
🎜🎜 Anti-modèle : 🎜La fonction suivante ne gère pas l'erreur renvoyée par os.Open(), ce qui peut provoquer le crash du programme : 🎜rrreee🎜 Bonnes pratiques décrit dans cet article Avec de la pratique et en évitant les anti-modèles, vous pouvez écrire du code clair, maintenable et facile à déboguer. 🎜

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