Maison >développement back-end >Golang >Quand Golang Defer sera-t-il exécuté ?
Golang a une instruction de contrôle spéciale, c'est-à-dire defer. L'instruction defer est utilisée pour retarder l'appel de la fonction spécifiée, comme la libération de ressources, etc. la fin de la fonction, mais avant le retour , regardons d'abord le code pour avoir une brève compréhension : (Apprentissage recommandé : go)
package main func main() { test() }func test() { println("test1") defer func() { println("defer test2") }() println("test3") }
L'exécution les résultats sont les suivants :
test1 test3 defer test2
Il est clair que la fonction avec defer est exécutée en dernier
Maintenant, changez le code pour que le code panique lorsqu'une exception est levée. , la fonction de report sera-t-elle toujours exécutée ?
package main func main() { test() }func test() { println("test1") panic("panic") defer func() { println("defer test2") }() println("test3") }
Sortie
test1 panic: panic Process finished with exit code 2
La fonction de retard n'est pas exécutée. Pourquoi ? C'est parce que la panique est avant la fonction de retard. Modifiez le code comme suit :
package main func main() { test() }func test() { println("test1") defer func() { println("defer test2") }() panic("panic") println("test3") }
Sortie
test1 defer test2 panic: panic
La fonction de retard est exécutée, et vous peut voir panique La fonction retardée ne peut pas être exécutée avant la fonction retardée, après tout, une exception sera levée.
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!