In Go verzögern Defer-Anweisungen die Ausführung einer Funktion, Methode oder anonymen Methode, bis die umgebende Funktion zurückkehrt. Anders ausgedrückt: Die Argumente der Defer-Funktion oder -Methode werden sofort ausgewertet, aber erst ausgeführt, wenn die umgebende Funktion zurückkehrt. Mit dem Schlüsselwort defer können Sie eine verzögerte Methode, Funktion oder anonyme Funktion erstellen.

Syntax:
// Hàm
defer func func_name(parameter_list Type)return_type{
// Code
}
// Phương thức
defer func (receiver Type) method_name(parameter_list){
// Code
}
defer func (parameter_list)(return_type){
// code
}()
Wichtiger Hinweis:
- In der Sprache Go sind mehrere Defer-Anweisungen im selben Programm zulässig und werden in der LIFO-Reihenfolge (Last-In, First-Out) ausgeführt, wie in Beispiel 2 gezeigt.
- In Defer-Anweisungen werden die Argumente ausgewertet, wenn die Defer-Anweisung ausgeführt wird, und nicht, wenn sie aufgerufen wird.
- Defer-Anweisungen werden häufig verwendet, um sicherzustellen, dass Dateien geschlossen werden, wenn sie nicht mehr benötigt werden, um Kanäle zu schließen oder um Probleme im Programm zu erkennen.
Zum besseren Verständnis sehen wir uns nun ein Beispiel an.
Beispiel 1:
// Chương trình Go minh họa
// khái niệm của lệnh defer
package main
import "fmt"
// Các hàm
func mul(a1, a2 int) int {
res := a1 * a2
fmt.Println("Result: ", res)
return 0
}
func show() {
fmt.Println("Hello!, Quantrimang.com")
}
// Hàm chính
func main() {
// Gọi hàm mul()
// Tại đây hàm mul hoạt động
// như một hàm bình thường
mul(23, 45)
// Gọi hàm mul()
// Dùng từ khóa defer
// Hàm the mul()
// là hàm defer
defer mul(23, 56)
// Gọi hàm show()
show()
}
Ergebnis:
Result: 1035
Hello!, Quantrimang.com
Result: 1288
Erklärung: Im obigen Beispiel haben wir zwei Funktionen namens mul() und show() . Während die Funktion show() normal in der Funktion main() aufgerufen wird , wird die Funktion mul() auf zwei verschiedene Arten aufgerufen:
- Zuerst rufen wir die Funktion „mul“ normal auf (ohne das Schlüsselwort „defer“), also mul(23, 45), und sie wird ausgeführt, wenn die Funktion aufgerufen wird (Ausgabe: Ergebnis: 1035).
- Zweitens rufen wir die Funktion mul() als Defer-Funktion mit dem Schlüsselwort defer auf, d. h. defer mul(23, 56), und sie wird ausgeführt (Ausgabe: Ergebnis: 1288), wenn alle umgebenden Methoden zurückkehren.
Beispiel 2:
// Minh họa chương trình Go
// dùng nhiều lệnh defer, để minh họa chính sách LIFO
package main
import "fmt"
// Các hàm
func add(a1, a2 int) int {
res := a1 + a2
fmt.Println("Result: ", res)
return 0
}
// Hàm chính
func main() {
fmt.Println("Start")
// Nhiều lệnh defer
// Triển khai theo thứ tự LIFO
defer fmt.Println("End")
defer add(34, 56)
defer add(10, 10)
}
Ergebnis:
Start
Result: 20
Result: 90
End