capypad
0 Tage Serie
go / beginner
Snippet

Defer: Planung von Funktionsaufrufen

Das defer-Schlüsselwort plant einen Funktionsaufruf, der ausgeführt wird, nachdem die umgebende Funktion zurückkehrt, aber bevor die Funktion tatsächlich beendet wird. Dies wird häufig für Aufräumarbeiten wie Schließen von Dateien oder Freigeben von Ressourcen verwendet. Mehrere defer-Anweisungen führen in LIFO-Reihenfolge (Last In, First Out) aus - die letzte defer-Anweisung läuft zuerst, wenn die Funktion zurückkehrt.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main
 
import "fmt"
 
func main() {
fmt.Println("Start")
 
defer fmt.Println("Deferred 1")
defer fmt.Println("Deferred 2")
defer fmt.Println("Deferred 3")
 
fmt.Println("Middle")
 
fmt.Println("End")
}
Erklärung
1
defer fmt.Println("Deferred 1")
Plant diesen Aufruf nach der Rückkehr von main auszuführen
2
defer fmt.Println("Deferred 2")
Zweites defer, wird vor Deferred 1 ausgeführt
3
defer fmt.Println("Deferred 3")
Drittes defer, wird vor Deferred 2 ausgeführt
4
Ausgabereihenfolge:
Start, Middle, End, Deferred 3, Deferred 2, Deferred 1