golang關於defer執行順序的面試題

2021-10-09 20:31:21 字數 697 閱讀 5608

這段**的執行結果是什麼?

func

main()

func

defer_call()

()defer

func()

()defer

func()

()panic

("觸發異常"

)}

//執行結果

列印後列印中

列印前panic

: 觸發異常

goroutine 1

[running]

:main.

defer_call()

d:/golandworkapace/src/cn.basecommon/offer/offer1/main.go:

15+0x97

main.

main()

d:/golandworkapace/src/cn.basecommon/offer/offer1/main.go:

8+0x17

process finished with exit code 2

defer 的執行順序是後進先出。當出現 panic 語句的時候,會先按照 defer 的後進先出的順序執行,最後才會執行panic

Golang 的defer執行規則

defer是golang的乙個特色功能,被稱為 延遲呼叫函式 當外部函式返回後執行defer。類似於其他語言的 try catch finally 中的finally,當然差別還是明顯的。在使用defer之前我們應該多了解defer的特性,這樣才能避免使用上的誤區。1.最簡單的deferfunc t...

golang 中多個 defer 的執行順序

引用 ture go 中的乙個示例 package main import fmt func main fmt.println done 程式執行結果為 counting done98 7654 3210從結果可以看出,defer的執行可以看做是乙個filo first in last out 棧。...

golang延遲函式defer

golang的defer優雅又簡潔,是golang的亮點之一。defer在宣告時不會立即執行,而是在函式return後,再按照先進後出的原則依次執行每個defer,一般用於釋放資源 清理資料 記錄日誌 異常處理等。下面舉個例子 package main import fmt func deferte...