Semantik Nilai dan Penunjuk dalam Go
Semantik nilai merujuk kepada pemindahan salinan nilai pembolehubah kepada fungsi atau kaedah, membenarkan fungsi untuk hanya mengubah suai salinan ini tanpa menjejaskan nilai asal.
Semantik penunjuk, di sisi lain tangan, membenarkan fungsi mengubah suai nilai asal dengan menghantar penunjuk kepadanya. Walaupun Go melepasi segala-galanya mengikut nilai, sesetengah jenis mempamerkan semantik penunjuk.
Contoh: Nilai Semantik
Pertimbangkan 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 }
Di sini , menghantar i kepada double menghasilkan salinan, dan sebarang pengubahsuaian dalam double tidak menjejaskan i asal pembolehubah.
Contoh: Semantik Penunjuk
Untuk menunjukkan semantik penuding, mari gunakan hirisan:
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 }
Dalam kes ini, lulus adalah untuk doubles mencipta salinan pengepala kepingan, tetapi penunjuk kepada tatasusunan asas tetap sama. Sebarang pengubahsuaian kepada unsur-unsur dalam beregu oleh itu dicerminkan dalam asalnya ialah hirisan.
Penaakulan
Dalam Go, semuanya diluluskan oleh nilai, tetapi kepingan terdiri daripada struktur yang mengandungi penunjuk kepada tatasusunan. Apabila hirisan diluluskan, salinan pengepala hirisan termasuk penuding yang sama, membenarkan fungsi untuk mengubah suai elemen tatasusunan asal. Tingkah laku ini dikenali sebagai semantik penunjuk.
Kesimpulan
Memahami nilai dan semantik penunjuk adalah penting dalam Go. Ia menentukan sama ada fungsi boleh mengubah suai nilai asal atau hanya salinan.
Atas ialah kandungan terperinci Nilai Go vs. Penunjuk Semantik: Bilakah Fungsi Mengubah Suai Pembolehubah Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!