defer
defer 會在外層 function return 後才執行,但會記得當下defer的狀態
即使發生錯誤或panic,
defer還是會執行
範例1:
package main
import "fmt"
func deferredFunc() {
fmt.Println("deferredFunc")
}
func main() {
defer deferredFunc()
fmt.Println("Hello, 世界")
}範例2:
func a() {
i := 0
defer fmt.Println(i)
i++
return
}如上的 defer 會在 a return 後印出 0
假設是 for 迴圈的 defer 則會推入類似 stack 內,先進後出
印出 3 2 1 0
再來試著讀取回傳值的defer
會印出4,因為 c 的 return 為 i
如果多個defer會相反方向執行
defer 會保留當下狀態
Last updated
Was this helpful?