Kaedah Penunjuk pada Jenis Bukan Penunjuk Dijelaskan
Dalam Go, konvensyen menyatakan bahawa kaedah nilai boleh digunakan pada kedua-dua penunjuk dan nilai, manakala kaedah penunjuk adalah terhad kepada penunjuk. Walau bagaimanapun, pengecualian jelas kepada peraturan ini ialah keupayaan untuk melaksanakan kaedah penuding pada nilai bukan penuding.
Pertimbangkan coretan kod berikut:
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() // Here, a pointer method is invoked on a non-pointer value fmt.Println("Wheels:", c.wheels) }
Kod berjaya melaksanakan kaedah penuding fourWheels pada nilai bukan penunjuk c. Ini mungkin kelihatan bercanggah dengan peraturan yang ditetapkan.
Sebenarnya, apabila menggunakan kaedah fourWheels pada nilai bukan penuding c, anda menggunakan tatatanda trengkas. Ungkapan c.fourWheels() adalah bersamaan dengan (&c).fourWheels().
Spesifikasi Go menyatakan: "Jika x boleh dialamatkan dan set kaedah & x mengandungi m, x.m() ialah singkatan untuk ( &x).m()."
Dalam erti kata lain, Go secara tersirat menyahrujuk nilai bukan penuding c untuk mendapatkan penuding kepada ia, yang kemudiannya digunakan sebagai penerima untuk kaedah penunjuk.
Untuk menjelaskan peraturan tentang kaedah penunjuk, ia harus ditafsirkan seperti berikut:
Atas ialah kandungan terperinci Mengapa Kaedah Penunjuk Boleh Dipanggil pada Nilai Bukan Penunjuk dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!