Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Nilai dan Semantik Penunjuk Mempengaruhi Pengubahsuaian Pembolehubah dalam 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 }
Output:
double: 2 original i: 1
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 }
Output:
double: 2 original i: 2
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 }
Output:
double: [2 4] original is: [2 4]
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!