首頁  >  文章  >  後端開發  >  golang defer什麼時候執行

golang defer什麼時候執行

(*-*)浩
(*-*)浩原創
2019-12-03 10:00:452592瀏覽

golang defer什麼時候執行

Golang有一個特殊的控制語句,那就是defer,defer語句用來延遲呼叫指定的函數,例如釋放資源等,它會在函數最後執行,但在return之前,先讓我們看程式碼簡單了解:              (建議學習:go

package main

func main() {
    test()
}func test() {
    println("test1")    defer func() {
        println("defer test2")
    }()
    println("test3")
}

執行結果如下:##

test1
test3
defer test2

#很清楚地看到,有defer那個函數最後才執行的

現在改一下程式碼,讓程式碼panic,當拋出例外時,defer延遲函數還會執行嗎?

package main

func main() {
    test()
}func test() {

    println("test1")
        panic("panic")    defer func() {
        println("defer test2")
    }()
    
    println("test3")
}

輸出

test1
panic: panic
Process finished with exit code 2

#延遲函數居然沒有執行,為什麼會這樣呢?是因為panic在延遲函數之前了,再改一下程式碼如下

package main

func main() {
    test()
}func test() {

    println("test1")    defer func() {
        println("defer test2")
    }()
    panic("panic")
    println("test3")
}

#輸出

test1
defer test2
panic: panic

延遲函數執行了,可以看到panic在延遲函數之前延遲函數是執行不了的,畢竟拋出例外。

以上是golang defer什麼時候執行的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn