golang基礎 細說defer

2022-06-28 15:00:09 字數 840 閱讀 7957

defer 匿名函式特性

- defer,匿名函式,變數傳遞,陣列array,for迴圈綜合

> 執行以下**,並分析輸出結果

```go

package main

import "fmt"

func main() //定義乙個變數fs,型別為乙個陣列,陣列元素的型別是匿名函式func

for i := 0; i < 4; i++ () // i從外部傳遞進defer匿名函式中,作為變數而非匿名函式引數,此時引用的是i的記憶體位址(只會引用i的最後值)

fs[i] = func() //為fs陣列索引賦值,i傳遞進匿名函式並沒有作為引數,所以i引用的是i的記憶體位址(只會引用i的最後值)

fmt.println(i)

}for n, f := range fs

}/*輸出

n=0 closure i= 4

n=1 closure i= 4

n=2 closure i= 4

n=3 closure i= 4

------------------------

defer closure i= 4

defer i= 3

defer closure i= 4

defer i= 2

defer closure i= 4

defer i= 1

defer closure i= 4

defer i= 0

*/```

分析結果,詳見**注釋

golang基礎小記(12) defer

go語言中的defer語句會將其後面跟隨的函式推遲到外層函式返回之後執行。推遲呼叫的函式其引數會立即求值,但直到外層函式返回前該函式都不會被呼叫。推遲的函式呼叫會被壓入乙個棧中,當外層函式返回時,被推遲的函式會按照後進先出的順序呼叫。defer語句後面只能跟函式呼叫。示例 a 1b 2defer f...

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...