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