Panggilan fungsi tertunda di Golang dilaksanakan oleh kata kunci tangguh, yang menangguhkan panggilan fungsi sehingga fungsi semasa keluar. Dengan menambahkan fungsi tangguh pada tindanan, fungsi dan parameter panggilan tertunda disimpan, memastikan fungsi tertunda dipanggil hanya selepas keluar dari fungsi. Ini digunakan dalam pengaturcaraan tak segerak, seperti menutup sambungan pangkalan data selepas fungsi keluar. tangguh juga boleh digunakan untuk tujuan lain seperti merekod masa pelaksanaan, membersihkan sumber sementara dan memulihkan status pelaksanaan.
Pelaksanaan panggilan fungsi tertunda di Golang
Di Golang, panggilan fungsi tertunda ialah teknik pengaturcaraan tak segerak yang membolehkan kita melakukan operasi tertentu selepas fungsi keluar. Ini boleh dicapai dengan menggunakan kata kunci tunda
. defer
关键字来实现。
defer
语句将一个函数调用的执行延迟到当前函数退出时。例如,以下代码将在函数 foo
退出时打印 "World":
func foo() { defer fmt.Println("World") fmt.Println("Hello") }
输出:
Hello World
实现细节
defer
语句是如何在 Golang 中实现延迟调用的呢?
defer
语句实际上将一个额外的函数添加到调用堆栈中,称为 defer 函数。defer 函数保存延迟调用的函数以及要传递给该函数的参数。
当当前函数退出时,它会执行所有在栈中的 defer 函数,从最先添加的开始。这确保了延迟调用的函数在退出函数后才被调用。
实战案例
考虑以下代码,它使用 defer
来关闭数据库连接:
func openDB() (*sql.DB, error) { db, err := sql.Open("postgres", "user:password@host:port/dbname") if err != nil { return nil, err } defer db.Close() // 数据库连接在函数退出时关闭 return db, nil }
这确保了数据库连接在任何情况下都会被正确关闭,即使执行途中出现错误。
其他用法
defer
tunda
menangguhkan pelaksanaan panggilan fungsi sehingga fungsi semasa keluar. Sebagai contoh, kod berikut akan mencetak "Dunia" apabila fungsi foo
keluar: tunda
berfungsi dalam Golang Bagaimana pula dengan melaksanakan panggilan tertunda? Pernyataan 🎜🎜tunda
sebenarnya menambah fungsi tambahan pada timbunan panggilan, dipanggil fungsi 🎜tunda🎜. Fungsi tangguh memegang fungsi tertunda dan parameter yang akan dihantar ke fungsi. 🎜🎜Apabila fungsi semasa keluar, ia akan melaksanakan semua fungsi tangguh pada tindanan, bermula daripada yang pertama ditambah. Ini memastikan bahawa fungsi tertunda tidak dipanggil sehingga fungsi keluar. 🎜🎜🎜Kes praktikal🎜🎜🎜Pertimbangkan kod berikut, yang menggunakan tunda
untuk menutup sambungan pangkalan data: 🎜rrreee🎜Ini memastikan sambungan pangkalan data akan ditutup dengan betul dalam apa jua keadaan, walaupun ralat berlaku semasa pelaksanaan. 🎜🎜🎜Kegunaan lain🎜🎜🎜Atas ialah kandungan terperinci Bagaimanakah panggilan tertunda dilaksanakan dalam fungsi golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!