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

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

Mary-Kate Olsen
Libérer: 2024-11-04 08:22:01
original
867 Les gens l'ont consulté

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

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

Utilisation :

<code class="go">defer Check(r.Body.Close)</code>
Copier après la connexion

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

Utilisation :

<code class="go">defer Checks(r.Body.Close, SomeOtherFunc)</code>
Copier après la connexion

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!

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