Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Penyata `tunda` Go Mempengaruhi Nilai Pulangan Berdasarkan Pengisytiharan Berubah?
Dalam Go, penyataan penangguhan digunakan untuk menjadualkan fungsi yang akan dilaksanakan selepas persekitaran fungsi kembali. Walau bagaimanapun, apabila ia datang untuk mengakses dan mengubah suai nilai pembolehubah dalam fungsi tertunda, tingkah laku boleh berbeza-beza bergantung pada cara pembolehubah diisytiharkan.
Kes 1: Pembolehubah Diisytiharkan sebagai Parameter Masuk
Pertimbangkan contoh berikut:
func c(i int) int { defer func() { i++ }() return i }
Di sini, saya diisytiharkan sebagai parameter masuk. Apabila pernyataan pulangan dilaksanakan, nilai pulangan dinilai dan fungsi tertunda berjalan selepas ini. Akibatnya, penambahan i dalam fungsi tertunda tidak mempunyai kesan ke atas nilai pulangan dan c(0) akan mencetak 0.
Kes 2: Pembolehubah Diisytiharkan Sebagai Parameter Hasil
Sekarang mari kita lihat contoh ini:
func c1() (i int) { defer func() { i++ }() return i }
Dalam kes ini, saya diisytiharkan sebagai nama parameter hasil. Apabila pernyataan pulangan dilaksanakan, nilai i dikembalikan secara eksplisit. Fungsi tertunda kemudiannya dibenarkan untuk mengubah suai nilai i, yang mempengaruhi nilai sebenar yang dikembalikan. Inilah sebabnya mengapa c1() mencetak 1.
Kes 3: Parameter Hasil dengan Nilai Pulangan Eksplisit
Untuk menggambarkan lebih lanjut, pertimbangkan contoh ini:
func c2() (i int) { defer func() { i++ }() return 2 }
Di sini, walaupun fungsi tangguh mengubah suai i, pernyataan pulangan eksplisit memberikan nilai 2 kepada i sebelum fungsi tangguh berjalan. Hasilnya, c2() mengembalikan 3.
Kesimpulan
Pengambilan utama ialah dalam Go, jika fungsi telah menamakan parameter hasil, nilai pulangan ialah nilai pembolehubah tersebut. Walau bagaimanapun, penyata pemulangan mungkin menetapkan nilai baharu kepada parameter hasil ini dan fungsi tertunda boleh mengubah suainya selepas penyataan pemulangan, yang menjejaskan nilai yang dikembalikan sebenar.
Atas ialah kandungan terperinci Bagaimanakah Penyata `tunda` Go Mempengaruhi Nilai Pulangan Berdasarkan Pengisytiharan Berubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!