Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Nilai dan Semantik Penunjuk Mempengaruhi Pengubahsuaian Pembolehubah dalam Go?

Bagaimanakah Nilai dan Semantik Penunjuk Mempengaruhi Pengubahsuaian Pembolehubah dalam Go?

Linda Hamilton
Lepaskan: 2024-12-16 17:52:12
asal
991 orang telah melayarinya

How Do Value and Pointer Semantics Affect Variable Modification in Go?

Semantik Nilai dan Penunjuk dalam Go

Go mematuhi prinsip semantik nilai, yang menentukan bahawa apabila nilai dihantar kepada fungsi atau kaedah , salinan nilai tersebut dibuat. Akibatnya, sebarang perubahan yang dibuat pada salinan dalam fungsi tidak mempunyai kesan ke atas nilai asal.

Tingkah laku ini jelas dalam contoh berikut:

func main() {
    i := 1
    fmt.Println("double:", double(i))
    fmt.Println("original i:", i)
}

func double(i int) int {
    i *= 2
    return i
}
Salin selepas log masuk

Output:

double: 2
original i: 1
Salin selepas log masuk

Seperti yang digambarkan, mengubah suai nilai dalam fungsi menggunakan semantik nilai tidak menjejaskan nilai asal nilai.

Sebaliknya, semantik penunjuk membenarkan pemanggil mengubah suai nilai asal walaupun ia diluluskan oleh nilai. Untuk mencapai matlamat ini, penunjuk kepada nilai asal mesti dihantar.

func main() {
    i := 1
    fmt.Println("double:", doublep(&i))
    fmt.Println("original i:", i)
}

func doublep(i *int) int {
    *i *= 2
    return *i
}
Salin selepas log masuk

Output:

double: 2
original i: 2
Salin selepas log masuk

Slices dalam Go mempamerkan semantik penunjuk. Walaupun hirisan diluluskan mengikut nilai, ia mengandungi penunjuk kepada tatasusunan asas. Apabila hirisan dihantar ke fungsi, salinan pengepala hirisan dibuat, tetapi ia mengekalkan penunjuk yang sama kepada tatasusunan asas. Akibatnya, pengubahsuaian yang dibuat kepada elemen hirisan dalam fungsi dicerminkan dalam kepingan asal.

func main() {
    is := []int{1, 2}
    fmt.Println("double:", doubles(is))
    fmt.Println("original is:", is)
}

func doubles(is []int) []int {
    for i := range is {
        is[i] *= 2
    }
    return is
}
Salin selepas log masuk

Output:

double: [2 4]
original is: [2 4]
Salin selepas log masuk

Mekanisme ini membolehkan pengubahsuaian yang dibuat untuk menghiris elemen dalam berfungsi untuk disebarkan kepada kepingan asal. Tatasusunan, walau bagaimanapun, mematuhi nilai semantik, dengan menghantar tatasusunan menghasilkan salinan semua elemennya.

Atas ialah kandungan terperinci Bagaimanakah Nilai dan Semantik Penunjuk Mempengaruhi Pengubahsuaian Pembolehubah 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