Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Pernyataan `menangguhkan` Go Mempengaruhi Pembolehubah Diisytiharkan sebagai Parameter Input lwn Parameter Hasil Dinamakan?
Tunda Gelagat untuk Pembolehubah Diisytiharkan Secara Berbeza di Golang
Fungsi dengan parameter hasil dinamakan berkelakuan berbeza apabila menggunakan penyataan tangguh berbanding dengan fungsi dengan parameter input . Dalam contoh ini, kita mengkaji perbezaan ini:
package main import ( "fmt" ) 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 } func main() { fmt.Println(c(0)) // Prints 0 fmt.Println(c1()) // Prints 1 fmt.Println(c2()) // Prints 3 }
c(i int):
Dalam kes ini, i ialah parameter masuk. Nilai pulangan dinilai sebelum fungsi tertunda dijalankan, jadi penambahan i selepas pulangan tidak mempunyai kesan.
c1():
Di sini, i ialah parameter hasil . Penyata pulangan i memberikan nilai i kepada nilai pulangan. Walau bagaimanapun, fungsi tertunda boleh mengubah suai pembolehubah pulangan. Dalam kes ini, fungsi tertunda bertambah i, menghasilkan nilai pulangan 1.
c2():
Serupa dengan c1(), pernyataan pulangan 2 memberikan 2 kepada i. Walau bagaimanapun, dalam kes ini, fungsi tertunda dilaksanakan selepas penyata pulangan, menghasilkan nilai pulangan sebanyak 3.
Ringkasnya, apabila bekerja dengan parameter hasil yang dinamakan dalam Go, adalah penting untuk diingat bahawa fungsi tertunda boleh mengubah suai nilai mereka walaupun selepas pernyataan pulangan. Tingkah laku ini dinyatakan secara eksplisit dalam spesifikasi Go dan boleh digunakan untuk mengubah nilai pulangan apabila perlu.
Atas ialah kandungan terperinci Bagaimanakah Pernyataan `menangguhkan` Go Mempengaruhi Pembolehubah Diisytiharkan sebagai Parameter Input lwn Parameter Hasil Dinamakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!