Go關鍵字defer的特性

2021-10-03 05:27:08 字數 1290 閱讀 8778

go裡面,流程控制語句中有乙個defer的關鍵字,翻譯過來就是延遲的意思。

下面用**說話。

func deferfunc()
defer在函式執行完畢之後,才會執行,所以,我們經常在釋放資源或異常處理等需要收尾的場景下會用到defer

不過defer也有一些「坑」,大家需要注意一下。

func printnumbers() ()

}}

上面例子中,defer是在for迴圈全部執行完畢之後才會執行,所以i已經變成了5,正確做法是下面這樣

func printnumbers() (i)

}}

上面列印的是倒序,這是因為defer的執行順序和棧的特性一樣,都是先進後出

defer還有乙個特性,當函式有引數傳入時,那些引數的值會在宣告時求出

func printnumbers() (i * 2)

}}

上面的例子大家可能看的不是很清楚,下面給過乙個例子

func main()
上面這個例子就很明顯了,後面i如何變都不會影響defer輸出的內容

defer還有乙個經常在面試中提到的問題,就是和return的執行順序,下面是我整理的3個例子

func main() 

func a() int ()

return i

}func b() (i int) ()

return i

}func c() *int ()

return &i

}// 輸出

a defer i: 1

a return: 0

b defer i: 2

b return: 2

c defer i: 3

c return: 3

原因網上有很多優秀的解釋,我就再說一下我的理解

正常工作裡面,雖然不可能寫這種**,但是面試的時候這些基礎問題出現的頻率還是挺高的,所以大家也是需要掌握一下。融匯貫通,自己多操作多試試,加深印象。

go語言中的defer關鍵字

在go語言裡面 有乙個關鍵字 我們經常會碰到 就是 defer 關於defer我們需要記住以下幾點 因此,defer通常用來釋放函式內部變數。在看下面的 func test01 未引用引數 跟測試一一樣 func test02 a 此處引用了引數 tese01 執行到 defer 那一行時候 因為此...

go語言defer關鍵字的用法

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

關於Go語言中defer關鍵字

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