go語言中的defer關鍵字

2021-10-05 08:07:16 字數 1092 閱讀 7026

在go語言裡面 有乙個關鍵字 我們經常會碰到 就是 defer ,關於defer我們需要記住以下幾點:

因此,defer通常用來釋放函式內部變數。

在看下面的**:

func test01() 

//未引用引數 跟測試一一樣

func test02() ()

a++}

//此處引用了引數

tese01 :**執行到 defer 那一行時候 因為此時引用了引數,所以 此時的數值 就是當前a的數值 跟後面無關.所以 a=10test02:正常執行完畢之後 a的數值 就是程式執行完事之後的數值 所以a=11.

test03:因為defer 引用了引數 ,跟test01乙個道理

上面的是簡單的乙個呼叫,目的是告訴defer 的作用 以及簡單說明,那麼當我們在同時使用多個defer 時候會出現什麼結果呢?會不會按照**呼叫順序來呢?我們繼續用**來看:

func test01()
結果:

這是因為每乙個協程都會維護乙個延遲呼叫堆疊,按照**順序把需要延遲呼叫的函式壓入棧中,當函式進入退出階段後,就會從延遲呼叫堆疊中取出需要執行的函式呼叫並執行。按照先進後出的原則來執行.

defer的資料結構:

這就可以解釋:

defer中使用閉包函式的時候,只有最後一次呼叫是被延遲執行的.

關於Go語言中defer關鍵字

在go語言中,defer語句會在該函式結束的時候被呼叫,即使後面的語句執行時出現異常了defer語句仍然會被執行。需要注意的是,如果defer語句中引用了引數,則該引數的值將是程式到defer這一行的時候的值,而與後面的語句沒有關係。以下為簡單測試 package main import fmt f...

go語言defer關鍵字的用法

在 go 中,defer語句會推遲函式 包括任何引數 的執行,直到包含defer語句的函式完成。通常情況下,當你想要避免忘記任務 例如關閉檔案或執行清理程序 時,可以推遲某個函式的執行。可以根據需要推遲任意多個函式。defer 語句按逆序執行,先執行最後乙個,最後執行第乙個。通過執行以下示例 來檢視...

Go關鍵字defer的特性

go裡面,流程控制語句中有乙個defer的關鍵字,翻譯過來就是延遲的意思。下面用 說話。func deferfunc defer在函式執行完畢之後,才會執行,所以,我們經常在釋放資源或異常處理等需要收尾的場景下會用到defer。不過defer也有一些 坑 大家需要注意一下。func printnum...