Dans Go, un appel de fonction différé vous permet d'exécuter du code après le retour de la fonction environnante. Cependant, le comportement des appels différés peut prêter à confusion si vous ne comprenez pas comment les arguments sont traités.
La citation de « A Tour of Go » indique que « le les arguments de l'appel différé sont évalués immédiatement, mais l'appel de fonction n'est pas exécuté jusqu'au retour de la fonction environnante. Cela signifie que :
Examinons l'exemple fourni :
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
Quand main() est appelée, ce qui suit se produit :
Comprendre la distinction entre l'évaluation des arguments et l'exécution de la fonction est crucial pour utiliser efficacement les appels différés dans Go. Les arguments sont évalués immédiatement lorsque l'instruction defer est exécutée, tandis que le corps de la fonction n'est exécuté qu'au retour de la fonction englobante. Cela vous permet de contrôler l'ordre dans lequel les actions sont effectuées et d'éviter les problèmes potentiels liés à un comportement inattendu des fonctions.
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!