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
現在改一下程式碼,讓程式碼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
以上是golang defer什麼時候執行的詳細內容。更多資訊請關注PHP中文網其他相關文章!