defer是go語言中的延遲執行語句,用來新增函式結束時或者return時執行的**,常用於釋放某些已分配的資源、關閉資料庫連線、斷開socket連線、解鎖乙個加鎖的資源。go語言機制擔保一定會執行defer語句中的**。
如上圖所示,在test函式中,會返回乙個int型別1995,但是有defer語句延遲執行了return,並先執行了匿名函式將返回值result自增,所以這裡列印的值會是1996。而如下圖所示的情況下,因為函式先進行了return,結束函式,故不會再進行自增操作
1、多個defer語句時,逆序執行
在函式中有多個defer語句共存時,按照語句逆序的順序執行。例如for迴圈下執行defer語句,則從後往前執行,即類似於乙個defer棧,遵循後進先出的原則。
2、在panic語句後的defer語句不被執行。
3、defer語句的執行原理
(1) 第一步給返回值賦值(若是有名返回值直接賦值,匿名返回值 則 先宣告再 賦值) ;
(2) 第二步呼叫return返回指令並傳入返回值,return會檢查是否存在defer語句,若存 在就先逆序插播 defer語句 ;
(3) 最後一步return攜帶返回值退出函式 。
(關於defer延遲執行語句的一點學習筆記,若有誤望指正,有新的內容會繼續回來編輯)。
Go語言入門 延遲呼叫 defer
func functionname parameterlist returntypes 語句defer想當前函式註冊乙個稍微執行的函式呼叫,它會在主調函式或者方法返回之前但是其返回值 當返回值存在 計算後執行。存在多個defer語句採用後進先出lifo last in first out 的順序執行...
Go 學習筆記 延遲執行函式 defer
go語言中有種不錯的設計,即延遲 defer 語句,你可以在函式中新增多個defer語句。當函式執行到最後時,這些defer語句會按照逆序執行,最後該函式返回。特別是當你在進行一些開啟資源的操作時,遇到錯誤需要提前返回,在返回前你需要關閉相應的資源,不然很容易造成資源洩露等問題。如下 所示,我們一般...
Go 學習筆記 延遲執行函式 defer
go語言中有種不錯的設計,即延遲 defer 語句,你可以在函式中新增多個defer語句。當函式執行到最後時,這些defer語句會按照逆序執行,最後該函式返回。特別是當你在進行一些開啟資源的操作時,遇到錯誤需要提前返回,在返回前你需要關閉相應的資源,不然很容易造成資源洩露等問題。如下 所示,我們一般...