Memahami Pengubahsuaian Fungsian di Golang dengan penangguhan
Di Golang, penangguhan membenarkan pembangun menyediakan fungsi untuk dilaksanakan selepas fungsi berakhir, membolehkan siaran -pembersihan pelaksanaan. Walau bagaimanapun, isu boleh timbul apabila cuba mengubah suai nilai pembolehubah yang diisytiharkan dengan cara yang berbeza dalam fungsi yang sama.
Pertimbangkan contoh kod berikut:
func c(i int) int { defer func() { i++ }() return i } func c1() (i int) { defer func() { i++ }() return i } func c2() (i int) { defer func() { i++ }() return 2 }
Dalam c(0), disebabkan oleh i sebagai parameter input, nilai yang dikembalikan tidak terjejas oleh kenaikan tertunda, menghasilkan output cetakan 0.
Dalam c1(), i ialah parameter hasil yang dinamakan, di mana nilai pulangan ditetapkan secara eksplisit kepadanya sebelum pelaksanaan fungsi tertunda. Oleh itu, kenaikan tertunda mempengaruhi nilai yang dikembalikan, memberikan output sebanyak 1.
Walau bagaimanapun, dalam c2(), walaupun i dikembalikan secara eksplisit sebagai 2, kenaikan tertunda mengubah suai parameter hasil, menghasilkan pulangan nilai 3.
Spesifikasi menjelaskan tingkah laku ini:
Kembali penyataan:
Pernyataan "kembali" yang menentukan keputusan menetapkan parameter hasil sebelum sebarang fungsi tertunda dilaksanakan.
Untuk fungsi dengan parameter hasil dinamakan, nilai yang dikembalikan sentiasa nilai pembolehubah tersebut, tetapi kembalikan pernyataan boleh memberikan nilai baharu kepada parameter ini. Fungsi tertunda boleh mengubah suai lagi parameter ini selepas pernyataan pemulangan.
Prinsip ini terpakai pada kedua-dua fungsi dan kaedah, di mana fungsi tertunda boleh mengakses dan mengubah suai parameter hasil yang dinamakan sebelum ia dikembalikan. Oleh itu, adalah penting untuk mempertimbangkan cara pengisytiharan pembolehubah dan pengubahsuaian fungsi tertunda memberi kesan kepada nilai akhir yang dikembalikan.
Atas ialah kandungan terperinci Bagaimanakah Penyata `menangguhkan` Mempengaruhi Nilai Pulangan dalam Go Berdasarkan Pengisytiharan Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!