Maison > développement back-end > Golang > le corps du texte

Quand Golang Defer sera-t-il exécuté ?

(*-*)浩
Libérer: 2019-12-03 10:00:45
original
2594 Les gens l'ont consulté

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")
}
Copier après la connexion

L'exécution les résultats sont les suivants :

test1
test3
defer test2
Copier après la connexion

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")
}
Copier après la connexion

Sortie

test1
panic: panic
Process finished with exit code 2
Copier après la connexion

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")
}
Copier après la connexion

Sortie

test1
defer test2
panic: panic
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal