2016-11-16 3 views
-1

Salut, je suis nouveau à golang,Peut-on écrire des boucles/conditions/bloc de code dans un report?

J'utilise différer pour fermer mon ensemble de résultats comme ceci.

defer res.Close() 

Je voudrais vérifier si res is nil ou non avant d'appeler res.Close().

J'ai sous le bloc de code à la fin de la fonction mais il n'est pas invoqué à la fermeture suite à une erreur.

if(res!=nil){ 
      res.Close() 
     } 

Je voudrais savoir est-il possible que je puisse y parvenir en utilisant defer.

defer if(res!=nil){ 
       res.Close() 
      } 

De même, quelle est la méthode idiomatique pour gérer ces situations?

Répondre

5

Vous pouvez passer à defer un appel de fonction, et cela peut être une fonction littérale:

defer func() { 
    if res!=nil { 
      res.Close() 
    } 
}() 

Notez que vous l'habitude d'éviter ce problème en écrivant la déclaration defer juste après l'affectation des ressources.

+0

Merci Denys Séguret –