語法:
defer function_name()
1)defer在宣告時不會執行,而是推遲執行,在return執行前,倒序執行defer[先進後出],一般用於釋放資源,清理資料,記錄日誌,異常處理等。
2)defer有乙個特性:即使函式丟擲異常,defer仍會被執行,這樣不會出現程式錯誤導致資源不被釋放,或者因為第三方包的異常導致程式崩潰。
3)一般用於開啟檔案後釋放資源的操作,比如開啟乙個檔案,最後總是要關閉的。而在開啟和關閉之間,會有諸多的處理,可能會有諸多的if-else、根據不同的情況需要提前返回
f, = os.open(filename)defer f.close()
do_something()
if (condition_a)
do_something_again()
if (condition_b)
do_further_things()
package mainimport "fmt"
func defertest(number int) int ()
defer func() ()
defer func() ()
return number
}func main()
/*
one: 1
two: 2
three: 3
函式返回值: 0
*/
golang延遲函式defer
golang的defer優雅又簡潔,是golang的亮點之一。defer在宣告時不會立即執行,而是在函式return後,再按照先進後出的原則依次執行每個defer,一般用於釋放資源 清理資料 記錄日誌 異常處理等。下面舉個例子 package main import fmt func deferte...
golang延遲呼叫(defer)
defer特性 關鍵字 defer 用於註冊延遲呼叫。這些呼叫直到 return 前才被執。因此,可以用來做資源清理。多個defer語句,按先進後出的方式執行。defer語句中的變數,在defer宣告時就決定了。defer用途 關閉檔案控制代碼 鎖資源釋放 資料庫連線釋放 defer的觸發packa...
golang基礎 細說defer
defer 匿名函式特性 defer,匿名函式,變數傳遞,陣列array,for迴圈綜合 執行以下 並分析輸出結果 go package main import fmt func main 定義乙個變數fs,型別為乙個陣列,陣列元素的型別是匿名函式func for i 0 i 4 i i從外部傳遞進...