Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Penyata `menangguhkan` Mempengaruhi Nilai Pulangan Dinamakan dalam Go?

Bagaimanakah Penyata `menangguhkan` Mempengaruhi Nilai Pulangan Dinamakan dalam Go?

Patricia Arquette
Lepaskan: 2024-12-02 05:38:13
asal
1013 orang telah melayarinya

How Do `defer` Statements Affect Named Return Values in Go?

Bagaimanakah penangguhan berinteraksi dengan nilai pulangan yang dinamakan?

Dalam Go, kata kunci tangguh menangguhkan pelaksanaan fungsi sehingga fungsi sekeliling kembali . Dalam konteks nilai pulangan yang dinamakan, tingkah laku ini membenarkan fungsi tertunda untuk mengubah suai nilai yang akhirnya akan dikembalikan.

Pertimbangkan contoh berikut:

func c() (i int) {
    defer func() { i++ }()
    return 1
}
Salin selepas log masuk

Dalam contoh ini, fungsi utama mengembalikan 1. Walau bagaimanapun, fungsi tertunda menambah nilai pulangan dinamakan i sebanyak 1 sebelum fungsi utama kembali. Akibatnya, nilai pulangan sebenar bagi fungsi utama ialah 2.

Tingkah laku ini mungkin kerana dalam Go, kembalikan pernyataan dengan argumen secara berkesan menetapkan nilai kepada pembolehubah pulangan yang dinamakan sebelum kembali. Oleh itu, penyata pulangan 1 adalah bersamaan dengan yang berikut:

i = 1
return
Salin selepas log masuk

Akibatnya, fungsi tertunda boleh menetapkan kepada nilai pulangan yang dinamakan i dan mengubah suai nilai pulangan bagi fungsi sekeliling.

Adalah penting untuk ambil perhatian bahawa susunan penyata penangguhan adalah penting. Fungsi tertunda dilaksanakan dalam susunan Keluar-Masuk-Masuk-Dulu (LIFO). Ini bermakna fungsi tertunda yang terbaharu akan dilaksanakan terlebih dahulu selepas fungsi sekeliling kembali.

Untuk lebih memahami cara ini berfungsi, pertimbangkan contoh semakan berikut:

func c() (i int) {
    defer func() { fmt.Println("third") }()
    defer func() { i = 2 }()
    defer func() { fmt.Println("first") }()

    fmt.Println("second")
    return 1
}
Salin selepas log masuk

Dalam contoh ini, susunan pelaksanaan adalah sebagai berikut:

  1. fmt.Println("second")
  2. kembali 1
  3. i = 2
  4. fmt.Println("first")
  5. fmt.Println("third")

Fungsi tertunda yang menetapkan i kepada 2 dilaksanakan sebelum fungsi kembali, jadi nilai pulangan ialah 2. Penyata fmt.Println dilaksanakan dalam susunan terbalik kerana kepada tingkah laku LIFO penangguhan.

Atas ialah kandungan terperinci Bagaimanakah Penyata `menangguhkan` Mempengaruhi Nilai Pulangan Dinamakan dalam Go?. 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