Files
go_playground/5-go-by-example/44-defer.go
2022-01-12 19:22:31 +01:00

43 lines
993 B
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"os"
)
// Defer is used to ensure that a function call is performed later in a programs 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")
}
// its 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)
}
}