43 lines
993 B
Go
43 lines
993 B
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
)
|
||
|
||
// Defer is used to ensure that a function call is performed later in a program’s execution, usually for purposes of cleanup
|
||
func main() {
|
||
// suppose you wanted to create a file, write to it, and then close when done
|
||
// immediately after getting a file object with createFile, 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("/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")
|
||
|
||
}
|
||
|
||
// it’s important to check for errors when closing a file, even in a deferred function
|
||
func closeFile(f *os.File) {
|
||
fmt.Println("closing")
|
||
err := f.Close()
|
||
|
||
if err != nil {
|
||
fmt.Fprintf(os.Stderr, "error: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
}
|