Aritmetik Penunjuk dalam Go
Tidak seperti dalam C, aritmetik penuding tidak boleh dilakukan dalam Go. Seperti yang dinyatakan dalam Soalan Lazim Go, ketiadaan aritmetik penunjuk meningkatkan keselamatan dengan menghapuskan kemungkinan mendapatkan alamat haram. Selain itu, penyusun dan perkakasan moden membenarkan gelung indeks tatasusunan untuk memadankan kecekapan gelung aritmetik penuding.
Walaupun sekatan ini, secara teknikalnya boleh dilaksanakan aritmetik penuding menggunakan pakej yang tidak selamat. Walau bagaimanapun, ia amat tidak digalakkan kerana potensi risiko. Pertimbangkan contoh berikut:
package main import ( "fmt" "unsafe" ) func main() { vals := []int{10, 20, 30, 40} start := unsafe.Pointer(&vals[0]) // Pointer to the first element size := unsafe.Sizeof(int(0)) // Size of an int in bytes for i := 0; i < len(vals); i++ { item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i))) // Dereference the pointer at the correct offset fmt.Println(item) } }
Walaupun kod ini kelihatan melakukan aritmetik penuding, perlu ditekankan bahawa menggunakan pakej tidak selamat boleh membawa kepada tingkah laku yang tidak ditentukan dan hanya perlu dipertimbangkan dalam kes luar biasa. Untuk mengelakkan potensi risiko, adalah disyorkan untuk menggunakan pengindeksan tatasusunan terbina dalam Go atau alternatif lain yang selamat.
Atas ialah kandungan terperinci Adakah Aritmetik Penunjuk Berkemungkinan dalam Go, dan Mengapa Ia Tidak Digalakkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!