首頁 > 後端開發 > Golang > 主體

golang defer什麼時候執行

(*-*)浩
發布: 2019-12-03 10:00:45
原創
2590 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板