capypad
0 day streak
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
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 main
 
import (
"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