概念簡介
Defer 被用來確保一個函數調用在程序執行結束前執行。同
樣用來執行一些清理工作。 `defer` 用在像其他語言中的
`ensure` 和 `finally`用到的地方。
例程代碼
package main
import "fmt"
import "os"
// 假設我們想要創建一個文件,向它進行寫操作,然後在結束
// 時關閉它。這裏展示了如何通過 `defer` 來做到這一切。
func main() {
// 在 `createFile` 後得到一個文件對象,
// 我們使用 defer 通過 `closeFile` 來關閉這個文件。
// 這會在封閉函數 (`main`)結束時執行,就是 `writeFile` 結束後。
f := createFile("/tmp/defer.txt")
defer closeFile(f)
writeFile(f)
}
func createFile(p string) *os.File {
fmt.Println("creating")
f, err := os.Create(p)
if err != nil {
panic(err)
}
return f
}
func writeFile(f *os.File) {
fmt.Println("writing")
fmt.Fprintln(f, "data")
}
func closeFile(f *os.File) {
fmt.Println("closing")
f.Close()
}
執行&輸出
# 執行程序,確認這個文件在寫入後是已關閉的。
go run defer.go
creating
writing
closing
課程導航
學習上一篇:Go語言教程:Panic 學習下一篇:Go語言教程:組合函數
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/defer