Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Penyata `tunda` Go Mempengaruhi Nilai Pulangan Berdasarkan Pengisytiharan Berubah?

Bagaimanakah Penyata `tunda` Go Mempengaruhi Nilai Pulangan Berdasarkan Pengisytiharan Berubah?

Susan Sarandon
Lepaskan: 2024-11-25 03:07:14
asal
457 orang telah melayarinya

How Do Go's `defer` Statements Affect Return Values Based on Variable Declarations?

Memahami Nilai Tangguh dan Pulangan dalam Go: Mengapa Keputusan Berbeza dengan Pengisytiharan Pembolehubah

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan