Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Penyata `tunda` dan Nilai Pulangan Dinamakan Berinteraksi dalam Go?

Bagaimanakah Penyata `tunda` dan Nilai Pulangan Dinamakan Berinteraksi dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 18:23:09938semak imbas

How Do `defer` Statements and Named Return Values Interact in Go?

Memahami Nilai Pemulangan Tangguh dan Dinamakan dalam Go

Dalam Go, penyataan penangguhan membenarkan fungsi melaksanakan kod selepas fungsi sekeliling kembali. Tingkah laku ini boleh digunakan untuk mengubah suai nilai pulangan yang dinamakan bagi fungsi sekeliling.

Pertimbangkan contoh berikut:

func c() (i int) {
    defer func() { i++ }()
    return 1
}

Fungsi ini mengembalikan 2, walaupun pernyataan pulangan 1 digunakan. Ini kerana penyataan penangguhan menolak panggilan fungsi ke tindanan, yang dilaksanakan serta-merta sebelum fungsi sekeliling kembali. Oleh itu, penyataan i dilaksanakan selepas penyataan pulangan 1, menambah nilai i kepada 2.

Memahami Pulangan Telanjang

Adalah penting untuk menjelaskan bahawa "telanjang return" dalam Go merujuk kepada pernyataan pulangan tanpa sebarang hujah. Dalam kes sedemikian, nilai pulangan yang dinamakan dikembalikan tanpa diberikan secara eksplisit.

func a() (i int) {
    i = 2
    return
}

Fungsi ini mengembalikan 2, kerana penyataan pulangan bogel mengembalikan nilai pulangan bernama i, yang telah ditetapkan sebelum ini kepada 2.

Menggabungkan Tangguh dan Pulangan Tidak Bogel

Dalam contoh fungsi c, pernyataan tangguh mengubah nilai pulangan yang dinamakan i selepas pernyataan pulangan 1 dilaksanakan. Ini secara berkesan bersamaan dengan kod berikut:

func c() (i int) {
    i = 1
    defer func() { i++ }()
}

Dalam kes ini, penyata pulangan masih mengembalikan 1, tetapi penyataan tangguh menambah nilai i sebelum fungsi kembali.

Atas ialah kandungan terperinci Bagaimanakah Penyata `tunda` dan Nilai Pulangan Dinamakan Berinteraksi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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