defer - skynocover/Wiki-for-GoLang GitHub Wiki
defer
用來延遲執行,發生於return之後
用來釋放資源
f, _ := os.Open(filename)
defer f.Close()
可以不用去管return的位置,直接寫在file後面即可
接住panic
func main() {
defer func() {
if ok := recover(); ok != nil {
fmt.Println("recover")
}
}()
panic("error")
}
順序
計算順序
func a() {
i := 0
defer fmt.Println(i) //在這裡決定defer的值
i++
return
}
// 0
多個defer順序
defer func() { fmt.Println("1") }()
defer func() { fmt.Println("2") }()
defer func() { fmt.Println("3") }()
// 3 2 1
return後還是可以修改
func c() (i int) {
defer func() { i++ }()
return 1
}
// 2