Maison > développement back-end > Golang > le corps du texte

Comment gérer correctement les erreurs renvoyées par Defer in Go ?

Susan Sarandon
Libérer: 2024-11-07 19:02:02
original
851 Les gens l'ont consulté

How to Properly Handle Errors Returned by Defer in Go?

Gestion des erreurs et reports

Dans Go, l'instruction defer est couramment utilisée pour exécuter une fonction ou une opération de nettoyage après le retour de la fonction environnante. Cependant, si la fonction différée renvoie une erreur, elle peut être négligée en raison de la pratique typique consistant à ignorer l'erreur renvoyée par defer, ce qui peut entraîner un comportement inattendu du système.

Considérez le scénario suivant :

OpenDbConnection(connectionString string, logSql bool) (*gorm.DB, error) {
    logger := zap.NewExample().Sugar()
    defer logger.Sync()
}
Copier après la connexion

Dans cet exemple, la méthode logger.Sync() peut renvoyer une erreur qui est ignorée, laissant les problèmes potentiels non résolus.

Stratégies possibles

  • Utilisez une variable d'erreur nommée : Initialisez une variable d'erreur dans la portée de la fonction et attribuez-lui l'erreur renvoyée par la fonction différée. Cela permet à l'erreur d'être inspectée et traitée selon les besoins.
  • Fonction différée appelable sans argument : Entourez la fonction différée dans une fonction anonyme sans arguments. Cela permet à la fonction différée de renvoyer une erreur, qui peut ensuite être affectée à la variable d'erreur nommée.
  • Renvoyer l'erreur et la gérer dans la fonction appelante : Renvoyer l'erreur de la fonction et laissez la fonction appelante le gérer de manière appropriée. Cela peut être préféré si l'erreur nécessite un traitement ou une analyse particulière.

Voici un exemple utilisant la stratégie de variable d'erreur nommée :

func OpenDbConnection(connectionString string, logSql bool) (db *gorm.DB, err error) {
    logger := zap.NewExample().Sugar()
    defer func() {
        err = logger.Sync()
    }()

    // ... rest of function logic ...

    return db, err
}
Copier après la connexion

Avec cette approche, l'erreur peut être vérifié et géré dans la fonction appelante :

db, err := OpenDbConnection(connectionString, logSql)
if err != nil {
    // Handle the error
}
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!