Maison > développement back-end > Golang > Comment gérer les avertissements Errcheck lors du report de fonctions avec des variables de retour dans Go ?

Comment gérer les avertissements Errcheck lors du report de fonctions avec des variables de retour dans Go ?

Barbara Streisand
Libérer: 2024-11-03 08:13:02
original
391 Les gens l'ont consulté

How to Handle Errcheck Warnings When Deferring Functions with Return Variables in Go?

Avertissement Errcheck sur le report de fonctions avec des variables de retour

Lors du report d'une fonction qui renvoie une variable dans Go, des linters comme gometalinter et errcheck peuvent émettre avertissements. En effet, les fonctions différées n'ont pas de valeurs de retour accessibles, ce qui entraîne des erreurs potentielles non gérées.

Pour résoudre ce problème, l'approche recommandée consiste à envelopper la fonction différée dans une autre fonction anonyme ou nommée qui capture la variable d'erreur.

Voici un exemple utilisant une fonction anonyme :

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

Cette approche permet au code de gestion des erreurs d'être exécuté immédiatement après la fonction différée, garantissant ainsi qu'aucune erreur potentielle n'est rejetée.

Alternativement, une fonction d'assistance peut être créée pour effectuer la vérification des erreurs et être différée à la place :

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

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

Cette fonction d'assistance peut être réutilisée pour plusieurs fonctions différées, simplifiant ainsi le processus de gestion des erreurs.

Par exemple, une fonction d'assistance modifiée peut accepter plusieurs fonctions et les exécuter dans l'ordre inverse :

<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
    }
  }
}

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

Cela garantit que la dernière fonction différée est exécutée en premier, imitant l'ordre d'exécution des fonctions différées dans Go .

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