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

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

Linda Hamilton
Libérer: 2024-11-01 22:53:02
original
406 Les gens l'ont consulté

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 :

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()</code>
Copier après la connexion

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 :

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}</code>
Copier après la connexion

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

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

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

<code class="go">func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            // Handle the error
        }
    }
}</code>
Copier après la connexion

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

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

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.

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