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
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")}
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