Go延遲(defer)範例


Defer用於確保稍後在程式執行中執行函式呼叫,通常用於清理目的。延遲(defer)常用於例如,ensurefinally常見於其他程式設計語言中。

假設要建立一個檔案,寫入內容,然後在完成之後關閉。這裡可以這樣使用延遲(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