Memahami Ralat "Tidak Boleh Mengambil Alamat" dan "Tidak Boleh Menghidupkan Kaedah Penunjuk Panggil"
Apabila bekerja dengan Go, seseorang mungkin menghadapi ralat seperti "tidak boleh mengambil alamat" atau "tidak boleh memanggil kaedah penunjuk," mengelirukan mereka yang mempelajarinya bahasa.
Isu:
Pertimbangkan kod Go berikut:
diff := projected.Minus(c.Origin) dir := diff.Normalize() // error: cannot call pointer method on Vector3 // Vector3 methods func (a *Vector3) Minus(b Vector3) Vector3 { ... } func (a *Vector3) Normalize() Vector3 { ... }
Barisan kedua menyebabkan ralat kompilasi kerana Vector3.Normalize() memerlukan penerima penunjuk, bermakna ia mengharapkan penunjuk kepada nilai Vector3 (*Vector3) dan bukannya Vector3 nilai.
Mengapa ia Berlaku:
Nilai pengembalian fungsi dan panggilan kaedah tidak boleh dialamatkan dalam Go. Oleh itu, dalam contoh kedua, pengkompil tidak boleh mengambil alamat hasil Vector3.Minus(), menghalangnya daripada memanggil Normalize() pada nilai tersebut.
Mungkin Penyelesaian:
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memanggil Kaedah Penunjuk pada Hasil Panggilan Fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!