Go語言 3 defer延遲執行

2021-10-03 14:06:59 字數 777 閱讀 8321

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語句會按照逆序執行,最後該函式返回。特別是當你在進行一些開啟資源的操作時,遇到錯誤需要提前返回,在返回前你需要關閉相應的資源,不然很容易造成資源洩露等問題。如下 所示,我們一般...