Maison > développement back-end > Golang > 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
Libérer: 2024-11-02 01:00:30
original
951 Les gens l'ont consulté

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

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

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

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

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

Utilisation de cet assistant :

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

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!

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