Aller au contenu

Defer

L’instruction defer reporte l’exécution d’une fonction jusqu’à ce que la fonction englobante se termine (après un return ou en cas de panic). Les appels defer sont empilés et exécutés en ordre LIFO (dernier entré, premier sorti).

Utilisation typique : fermeture de fichiers, libération de verrous, nettoyage.

Démontrer l’ordre d’exécution des defer et leur utilité.

package main
import "fmt"
func main() {
fmt.Println("début")
// Les defer sont empilés
defer fmt.Println("premier defer (exécuté en dernier)")
defer fmt.Println("deuxième defer")
defer fmt.Println("troisième defer (exécuté en premier)")
fmt.Println("fin de la fonction")
// Les defer s'exécutent ici, après le return implicite
}
Fenêtre de terminal
début
fin de la fonction
troisième defer (exécuté en premier)
deuxième defer
premier defer (exécuté en dernier)
f, err := os.Open("fichier.txt")
if err != nil {
return err
}
defer f.Close() // fermeture garantie