Defer用於確保稍後在程式執行中執行函式呼叫,通常用於清理目的。延遲(defer
)常用於例如,ensure
和finally
常見於其他程式設計語言中。
假設要建立一個檔案,寫入內容,然後在完成之後關閉。這裡可以這樣使用延遲(defer
)處理。
在使用createFile
獲取檔案物件後,立即使用closeFile
推遲該檔案的關閉。這將在writeFile()
完成後封裝函式(main
)結束時執行。
執行程式確認檔案在寫入後關閉。
所有的範例程式碼,都放在
F:\worksp\golang
目錄下。安裝Go程式設計環境請參考:/2/23/798.html
panic.go
的完整程式碼如下所示 -
package main
import "fmt"
import "os"
// Suppose we wanted to create a file, write to it,
// and then close when we're done. Here's how we could
// do that with `defer`.
func main() {
// Immediately after getting a file object with
// `createFile`, we defer the closing of that file
// with `closeFile`. This will be executed at the end
// of the enclosing function (`main`), after
// `writeFile` has finished.
f := createFile("defer-test.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()
}
執行上面程式碼,將得到以下輸出結果 -
F:\worksp\golang>go run defer.go
creating
writing
closing