In Go vertragen defer-instructies de uitvoering van een functie of methode, of een anonieme methode, totdat de nabijgelegen functies terugkeren. Met andere woorden: argumenten om functies of methoden uit te stellen, worden onmiddellijk geëvalueerd, maar ze worden pas uitgevoerd als de nabijgelegen functies terugkeren. U kunt een uitgestelde methode, functie of anonieme functie maken met behulp van het trefwoord defer.

Syntaxis:
// 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
}()
Belangrijke opmerking:
- In de Go-taal zijn meerdere defer-instructies toegestaan in hetzelfde programma en deze worden uitgevoerd in LIFO-volgorde (Last-In, First-Out), zoals weergegeven in Voorbeeld 2.
- Bij defer-instructies worden de argumenten geëvalueerd wanneer de defer-instructie wordt uitgevoerd, niet wanneer deze wordt aangeroepen.
- Defer-instructies worden vaak gebruikt om ervoor te zorgen dat bestanden worden gesloten wanneer ze niet meer nodig zijn, om kanalen te sluiten of om problemen in het programma op te sporen.
Laten we eens naar een voorbeeld kijken om het beter te begrijpen.
Voorbeeld 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()
}
Resultaat:
Result: 1035
Hello!, Quantrimang.com
Result: 1288
Uitleg: In het bovenstaande voorbeeld hebben we twee functies met de naam mul() en show() . Terwijl de show() -functie normaal gesproken wordt aangeroepen in de main()- functie , wordt de mul()- functie op twee verschillende manieren aangeroepen:
- Eerst roepen we de mul-functie op de normale manier aan (zonder het trefwoord defer), dat wil zeggen mul(23, 45). Deze wordt uitgevoerd wanneer de functie wordt aangeroepen (Uitvoer: Resultaat: 1035).
- Ten tweede roepen we de mul()-functie aan als een defer-functie met behulp van het trefwoord defer, d.w.z. defer mul(23, 56). Deze wordt uitgevoerd (Uitvoer: Resultaat: 1288) wanneer alle omliggende methoden terugkeren.
Voorbeeld 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)
}
Resultaat:
Start
Result: 20
Result: 90
End