Memahami Ralat Berkaitan Penunjuk dalam Go
Dalam Go, anda mungkin menghadapi ralat seperti "tidak boleh mengambil alamat" dan "tidak boleh kaedah penunjuk panggil dihidupkan" apabila bekerja dengan penunjuk. Soalan dan jawapan ini meneroka sebab di sebalik ralat ini dan menyediakan penyelesaian yang mungkin.
Mari pertimbangkan kod berikut yang menyusun dan berfungsi:
diff := projected.Minus(c.Origin) dir := diff.Normalize()
Walau bagaimanapun, jika kita cuba menggabungkan kedua-dua operasi ke dalam satu baris:
dir := projected.Minus(c.Origin).Normalize()
kita akan menghadapi ralat yang disebutkan di atas. Untuk memahami sebabnya, kita perlu menyelidiki jenis penerima dan kebolehalamatan nilai dalam Go.
Penerima Penunjuk dan Kebolehalamatan
Kaedah Normalize() Vector3 mempunyai penerima penunjuk (*Vector3), menunjukkan bahawa ia memerlukan penunjuk kepada nilai Vector3 untuk dipanggil. Apabila anda menggunakan pintasan diff.Normalize(), pengkompil secara automatik mengambil alamat pembolehubah perbezaan (&diff) untuk memadankan jenis penerima penunjuk yang diperlukan.
Walau bagaimanapun, dalam contoh kedua, diff.Minus(c .Origin) mengembalikan nilai Vector3, yang tidak boleh ditangani. Ini bermakna pengkompil tidak boleh menghantar alamatnya kepada Normalize().
Penyelesaian untuk Penerima Penunjuk dan Kebolehalamatan
Terdapat beberapa kemungkinan penyelesaian untuk isu ini:
Perkara Tambahan untuk Dipertimbangkan
Atas ialah kandungan terperinci Mengapa Go Return 'tidak boleh mengambil alamat' atau 'tidak boleh memanggil kaedah penunjuk pada' Ralat Semasa Kaedah Rantai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!