Rumah > pembangunan bahagian belakang > Golang > Mengapa Go Return 'tidak boleh mengambil alamat' atau 'tidak boleh memanggil kaedah penunjuk pada' Ralat Semasa Kaedah Rantai?

Mengapa Go Return 'tidak boleh mengambil alamat' atau 'tidak boleh memanggil kaedah penunjuk pada' Ralat Semasa Kaedah Rantai?

Barbara Streisand
Lepaskan: 2024-12-12 18:18:14
asal
441 orang telah melayarinya

Why Does Go Return

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()
Salin selepas log masuk

Walau bagaimanapun, jika kita cuba menggabungkan kedua-dua operasi ke dalam satu baris:

dir := projected.Minus(c.Origin).Normalize()
Salin selepas log masuk

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:

  • Tugaskan kepada pembolehubah dan panggil kaedah secara berasingan: Simpan hasil Tolak() dalam pembolehubah dan kemudian panggil Normalize() pada pembolehubah itu.
  • Buat fungsi pembantu dengan jenis pulangan penunjuk: Laksanakan fungsi pembantu yang mengembalikan penuding kepada input Vector3, membolehkan anda memanggil terus Normalize() pada nilai pulangan.
  • Ubah suai penerima kaedah dan hasil jenis: Tukar penerima Normalize() kepada penerima nilai (Vector3) dan jenis pulangan kepada penunjuk (*Vector3).
  • Gunakan kaedah yang mengembalikan penunjuk: Laksanakan kaedah dalam Vector3 yang mengembalikan penunjuk kepada dirinya sendiri, yang kemudiannya boleh digunakan untuk memanggil Normalize().

Perkara Tambahan untuk Dipertimbangkan

  • Ingat bahawa penerima penunjuk membenarkan kaedah untuk mengubah suai penerima, manakala penerima nilai tidak.
  • Penggunaan konsisten penunjuk/penerima nilai dan jenis hasil disyorkan untuk kod ketekalan.
  • Dalam kes jenis mudah seperti Vector3, biasanya tiada kebimbangan prestasi yang ketara dengan menggunakan penunjuk.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan