Maison >développement back-end >Golang >Quand Golang Defer sera-t-il exécuté ?

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

(*-*)浩
(*-*)浩original
2019-12-03 10:00:452618parcourir

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!

Déclaration:
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