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