capypad
0 Tage Serie
go / beginner
Snippet

Aufräumen mit Defer

Das `defer`-Keyword plant einen Funktionsaufruf zur Ausführung wenn die umgebende Funktion zurückkehrt. Dies ist essentiell für Aufräumen wie Schließen von Dateien oder Freigeben von Ressourcen. Verzögerte Funktionen führen in Last-In-First-Out-Reihenfolge aus - das letzte defer läuft zuerst wenn die Funktion endet. Dies stellt sicher, dass Ressourcen immer freigegeben werden, selbst wenn ein Fehler in der Mitte der Funktion auftritt.

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")
}
Erklärung
1
defer file.Close()
Plant file.Close() zur Ausführung wenn Funktion endet
2
make([]byte, 1024)
Erstellt einen Buffer zum Lesen der Dateiinhalte
3
defer fmt.Println("Last")
Verzögert - läuft nach Rückkehr der umgebenden Funktion
4
defer fmt.Println("Second")
Zweites defer - läuft vor "Last" wegen LIFO-Reihenfolge
5
fmt.Println("First")
Sofort ausgeführt, dann laufen defers beim Beenden