Dalam Go, panggilan fungsi tertunda membolehkan anda melaksanakan kod selepas fungsi sekeliling kembali. Walau bagaimanapun, tingkah laku panggilan tertunda boleh mengelirukan jika anda tidak memahami cara hujah dikendalikan.
Petikan daripada "A Tour of Go" menyatakan bahawa "the hujah panggilan tertunda dinilai serta-merta, tetapi panggilan fungsi tidak dilaksanakan sehingga fungsi sekeliling kembali." Ini bermakna:
Mari kita semak yang disediakan contoh:
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
Apabila main() dipanggil, perkara berikut berlaku:
Memahami perbezaan antara penilaian hujah dan pelaksanaan fungsi adalah penting untuk menggunakan panggilan tertunda dengan berkesan dalam Go. Argumen dinilai serta-merta apabila pernyataan tangguh dilaksanakan, manakala badan fungsi hanya dilaksanakan apabila fungsi lampiran kembali. Ini membolehkan anda mengawal tertib tindakan dilakukan dan mengelakkan potensi isu yang berkaitan dengan tingkah laku fungsi yang tidak dijangka.
Atas ialah kandungan terperinci Pergi Panggilan Tertunda: Adakah Argumen Dinilai Serta-merta atau Selepas Perlaksanaan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!