Maison  >  Article  >  développement back-end  >  Comment différer en toute sécurité des fonctions avec des valeurs de retour potentiellement non vérifiées dans Go ?

Comment différer en toute sécurité des fonctions avec des valeurs de retour potentiellement non vérifiées dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 01:00:30847parcourir

How to Safely Defer Functions with Potentially Unchecked Return Values in Go?

Gestion des fonctions différées avec des valeurs de retour non vérifiées

Lors de l'utilisation de gometalinter et errcheck, les développeurs peuvent rencontrer des avertissements concernant le report de fonctions qui renvoient une variable sans vérification pour les erreurs. Cela se produit généralement dans des scénarios tels que la fermeture d'un corps de requête, où la méthode Close() renvoie une valeur d'erreur.

Pour résoudre ce problème, l'approche recommandée consiste à différer une autre fonction qui appelle la fonction d'origine et vérifie son retour. valeur. Ceci peut être réalisé à l'aide d'une fonction anonyme, comme suit :

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

Une solution alternative consiste à créer une fonction d'assistance qui effectue la vérification des erreurs :

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

Cette fonction d'assistance peut alors être utilisé pour différer la fonction d'origine :

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

Pour plusieurs fonctions différées, un assistant modifié peut être créé pour accepter un tableau de fonctions :

<code class="go">func Checks(fs ...func() error) {
    // Implement error checking and execution logic
}</code>

Utilisation de cet assistant :

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

La boucle descendante dans l'assistant Checks() garantit que la dernière fonction différée est exécutée en premier, préservant l'ordre d'exécution des fonctions différées.

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