"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je gérer les valeurs de retour erronées des fonctions différées dans Go ?

Comment puis-je gérer les valeurs de retour erronées des fonctions différées dans Go ?

Publié le 2024-11-03
Parcourir:560

How can I handle erroneous return values from deferred functions in Go?

Gestion des fonctions différées avec des valeurs de retour erronées dans Go

gometalinter et errcheck déclenchent à juste titre un avertissement lorsqu'une fonction qui renvoie une variable est différée sans vérifier son erreur renvoyée. Cela peut entraîner des erreurs non gérées et des problèmes d'exécution potentiels.

L'idiome pour gérer ce scénario n'est pas de différer la fonction elle-même, mais plutôt de l'envelopper dans une autre fonction qui vérifie la valeur renvoyée. Voici un exemple :

defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()

En utilisant une fonction anonyme, vous pouvez capturer la valeur de retour de la fonction différée et gérer les erreurs qui se produisent.

Vous pouvez également créer une fonction d'assistance pour simplifier le processus. :

func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}

Cette fonction d'assistance peut ensuite être utilisée pour différer plusieurs fonctions, en garantissant que leurs valeurs de retour sont vérifiées :

defer Check(r.Body.Close)
defer Check(SomeOtherFunc)

Vous pouvez même étendre la fonction d'assistance pour accepter plusieurs fonctions :

func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            // Handle the error
        }
    }
}

Cela vous permet de différer plusieurs fonctions et de gérer leurs erreurs de manière plus concise et organisée :

defer Checks(r.Body.Close, SomeOtherFunc)

Pour garantir que les erreurs sont traitées dans le bon ordre, la fonction Checks() utilise une boucle descendante pour exécuter les fonctions dans l'ordre inverse de leur déclaration. Cela correspond à l'ordre d'exécution des fonctions différées, où la dernière fonction différée est exécutée en premier.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3