Seruan Kaedah Penunjuk pada Nilai Bukan Penunjuk
Dalam Go, adalah mungkin untuk menggunakan kaedah penuding pada nilai bukan penuding, walaupun peraturan am bahawa kaedah penunjuk hanya boleh digunakan pada penunjuk. Tingkah laku yang kelihatan bercanggah ini boleh dijelaskan oleh konsep penyahrujukan penunjuk automatik.
Dalam coretan kod yang diberikan:
package main import "fmt" type car struct { wheels int } func (c *car) fourWheels() { c.wheels = 4 } func main() { var c = car{} fmt.Println("Wheels:", c.wheels) c.fourWheels() fmt.Println("Wheels:", c.wheels) }
Ungkapan c.fourWheels() ialah singkatan untuk (&c) .fourWheels(). Ini kerana penerima fourWheels ialah penunjuk, dan c ialah nilai bukan penunjuk. Memandangkan c boleh dialamatkan, pengkompil secara automatik membatalkan rujukannya untuk mendapatkan penunjuk kepada nilai kereta, yang kemudiannya digunakan sebagai penerima.
Tingkah laku ini dinyatakan secara jelas dalam spesifikasi Go:
Jika x boleh dialamatkan dan set kaedah &x mengandungi m, x.m() ialah singkatan untuk (&x).m().
Oleh itu, sementara peraturan am tentang kaedah penuding kekal sah, penyahrujukan penunjuk automatik membenarkan penggunaan kaedah penuding yang mudah pada nilai bukan penuding dalam situasi tertentu. Adalah penting untuk ambil perhatian bahawa tingkah laku ini hanya digunakan pada kaedah dengan penerima penunjuk.
Atas ialah kandungan terperinci Mengapakah Saya Boleh Memanggil Kaedah Penunjuk pada Nilai Bukan Penunjuk dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!