Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Pernyataan `menangguhkan` Go Mempengaruhi Pembolehubah Diisytiharkan sebagai Parameter Input lwn Parameter Hasil Dinamakan?

Bagaimanakah Pernyataan `menangguhkan` Go Mempengaruhi Pembolehubah Diisytiharkan sebagai Parameter Input lwn Parameter Hasil Dinamakan?

Susan Sarandon
Susan Sarandonasal
2024-11-25 20:11:12252semak imbas

How Do Go's `defer` Statements Affect Variables Declared as Input Parameters vs. Named Result Parameters?

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!

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