Meneroka Kegunaan Tangguh dalam Go
Dalam Go, pernyataan penangguhan membenarkan anda melaksanakan fungsi pada penghujung fungsi semasa , tanpa mengira keadaan keluarnya. Walaupun ia mungkin kelihatan berlebihan untuk mempunyai fungsi ini kerana anda hanya boleh meletakkan kod di penghujung fungsi, tangguh menawarkan beberapa kelebihan unik:
Pengurusan Sumber:
Tangguh digunakan terutamanya untuk mengurus sumber dengan berkesan. Dengan menangguhkan penutupan sumber (cth., fail atau sambungan pangkalan data), anda memastikan ia ditutup walaupun fungsi itu terkeluar secara tiba-tiba disebabkan ralat atau panik.
Pengendalian Panik:
Fungsi tertunda boleh mengendalikan panik dengan memanggil fungsi terbina dalam pulih. Ini membolehkan anda memintas dan mengendalikan panik, dan bukannya membiarkannya tidak dikendalikan dan menamatkan program.
Perintah Pelaksanaan:
Panggilan tertunda diletakkan pada timbunan dan dilaksanakan dalam susunan terbalik apabila fungsi sekeliling tamat. Tertib terbalik ini membantu memastikan sumber diagihkan dengan betul, terutamanya dalam fungsi bersarang.
Kebolehcapaian:
Untuk memanggil fungsi tertunda, pernyataan tangguh mesti dicapai semasa melaksanakan fungsi sekeliling. Ini membolehkan pengurusan sumber yang lebih fleksibel, di mana sumber boleh dibuka dan ditutup di bahagian fungsi yang berlainan.
Perbandingan dengan Try-Catch-Akhirnya:
Tangguhkan kenyataan boleh dianggap sebagai alternatif kepada blok try-catch-finally, menyediakan sintaks yang lebih mudah dan mengelakkan blok bersarang dan skop isu.
Pengubahsuaian Nilai Pulangan:
Sama seperti akhirnya menyekat, panggilan fungsi tertunda boleh mengubah suai nilai pulangan fungsi sekeliling jika ia boleh mencapai yang dikembalikan data.
Contoh:
func main() { f, err := os.Create("file") if err != nil { panic("cannot create file") } defer f.Close() // no matter what happens here, the file will be closed }
func main() { defer func() { msg := recover() fmt.Println(msg) }() f, err := os.Create(".") // . is a current directory if err != nil { panic("cannot create file") } defer f.Close() // no matter what happens here, the file will be closed }
func yes() (text string) { defer func() { text = "no" }() return "yes" } func main() { fmt.Println(yes()) }
Atas ialah kandungan terperinci Bagaimanakah Penyata `defer` Go Meningkatkan Pengurusan Sumber dan Pengendalian Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!