go / beginner
Snippet
Clean-up with Defer
The `defer` keyword schedules a function call to execute when the surrounding function returns. This is essential for cleanup tasks like closing files or releasing resources. Deferred functions execute in Last-In-First-Out order - the last defer runs first when the function exits. This ensures resources are always released even if an error occurs mid-function.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package mainimport ("fmt""os")func readFile(name string) error {file, err := os.Open(name)if err != nil {return err}defer file.Close()buffer := make([]byte, 1024)_, err = file.Read(buffer)return err}func main() {defer fmt.Println("Last")defer fmt.Println("Second")fmt.Println("First")}
Breakdown
1
defer file.Close()
Schedules file.Close() to run when function exits
2
make([]byte, 1024)
Creates a buffer for reading file contents
3
defer fmt.Println("Last")
Deferred - runs after surrounding function returns
4
defer fmt.Println("Second")
Second defer - runs before "Last" due to LIFO order
5
fmt.Println("First")
Executed immediately, then defers run on exit