Maison  >  Article  >  développement back-end  >  Comment puis-je gérer les fonctions différées avec les variables renvoyées dans Go sans erreurs ?

Comment puis-je gérer les fonctions différées avec les variables renvoyées dans Go sans erreurs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 08:22:01802parcourir

How Can I Handle Deferred Functions with Returned Variables in Go without Errors?

gometalinter / errcheck et fonctions différées avec variables renvoyées

les outils gometalinter et errcheck déclenchent un avertissement lorsqu'une fonction qui renvoie une variable est différée. Cela se produit parce que les valeurs de retour des fonctions différées sont ignorées, de sorte que la variable d'erreur renvoyée n'est pas vérifiée.

L'approche recommandée consiste à différer une autre fonction qui appelle la fonction d'origine et gère sa valeur de retour. Cela peut être fait à l'aide d'une fonction anonyme comme suit :

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        fmt.Println("Error when closing:", err)
    }
}()</code>

Vous pouvez également créer une fonction d'assistance pour gérer la vérification des erreurs :

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        fmt.Println("Received error:", err)
    }
}</code>

Utilisation :

<code class="go">defer Check(r.Body.Close)</code>

Pour plusieurs fonctions différées, envisagez une fonction d'assistance qui prend plusieurs fonctions :

<code class="go">func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            fmt.Println("Received error:", err)
        }
    }
}</code>

Utilisation :

<code class="go">defer Checks(r.Body.Close, SomeOtherFunc)</code>

Notez que la boucle descendante dans Checks() imite l'ordre d'exécution de fonctions différées (dernier entré, premier sorti).

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