Dalam Go, tangguhkan kenyataan menangguhkan pelaksanaan fungsi atau kaedah atau kaedah tanpa nama sehingga fungsi berdekatan kembali. Dalam erti kata lain, hujah untuk menangguhkan fungsi atau kaedah dinilai serta-merta, tetapi ia tidak dilaksanakan sehingga fungsi berdekatan kembali. Anda boleh membuat kaedah tertunda, fungsi atau fungsi tanpa nama menggunakan kata kunci tangguh.

Sintaks:
// 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
}()
Nota Penting:
- Dalam bahasa Go, penyataan penangguhan berbilang dibenarkan dalam program yang sama dan ia dilaksanakan dalam susunan LIFO (Masuk Terakhir, Keluar Dahulu) seperti yang ditunjukkan dalam Contoh 2.
- Dalam penyataan tangguh, hujah dinilai apabila penyataan penangguhan dilaksanakan, bukan apabila ia dipanggil.
- Pernyataan tangguh sering digunakan untuk memastikan fail ditutup apabila keperluannya tamat, atau untuk menutup saluran, atau untuk menangkap masalah dalam program.
Sekarang mari kita lihat contoh untuk memahami dengan lebih baik.
Contoh 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()
}
Keputusan:
Result: 1035
Hello!, Quantrimang.com
Result: 1288
Penjelasan: Dalam contoh di atas, kita mempunyai dua fungsi bernama mul() dan show() . Walaupun fungsi show() dipanggil secara normal dalam fungsi main() , fungsi mul() dipanggil dalam dua cara yang berbeza:
- Pertama, kita memanggil fungsi mul secara normal (tanpa kata kunci tangguh), iaitu mul(23, 45) dan ia dilaksanakan apabila fungsi dipanggil (Output: Result: 1035).
- Kedua, kita memanggil fungsi mul() sebagai fungsi defer menggunakan kata kunci defer, iaitu defer mul(23, 56) dan ia melaksanakan (Output: Result: 1288) apabila semua kaedah sekeliling kembali.
Contoh 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)
}
Keputusan:
Start
Result: 20
Result: 90
End