Rumah > pembangunan bahagian belakang > Golang > Mengapa Kaedah Go dengan Penerima Penunjuk Nampaknya Mengubah Suai Argumen Nilai?

Mengapa Kaedah Go dengan Penerima Penunjuk Nampaknya Mengubah Suai Argumen Nilai?

DDD
Lepaskan: 2024-12-07 17:39:13
asal
682 orang telah melayarinya

Why Do Go Methods with Pointer Receivers Seem to Modify Value Arguments?

Mengapa Kaedah dengan Penerima Penunjuk Nampak Berfungsi dengan Argumen Nilai?

Dalam Latihan 51 Jelajah Go Go, kaedah Skala digambarkan sebagai tidak mempunyai kesan pada nilai Vertex. Walau bagaimanapun, percubaan mendedahkan bahawa Skala mengubah suai nilai input, walaupun apabila lulus nilai Vertex dan bukannya penuding.

Penjelasan

Penaipan kuat Go memerlukan kaedah dengan penerima penuding mestilah meluluskan hujah penunjuk. Walau bagaimanapun, pengkompil campur tangan dalam keadaan tertentu dan melakukan penukaran tersirat, mengubah argumen nilai menjadi penunjuk.

"Sihir" Pengkompil

Apabila kaedah memanggil x.m() dibuat , pengkompil menyemak perkara berikut:

  • Set kaedah bagi jenis pembolehubah x termasuk m.
  • Senarai argumen yang disediakan boleh diberikan kepada senarai parameter m.

Jika syarat ini dipenuhi dan x boleh dialamatkan (tidak disalin), pengkompil menulis semula kod sebagai (&x).m(). Penukaran ini membolehkan kaedah dengan penerima penuding berfungsi dengan kedua-dua penunjuk dan nilai.

Kepentingan

Penukaran tersirat ini ialah ciri utama set kaedah Go. Ia membolehkan kaedah beroperasi pada penunjuk atau nilai tanpa memerlukan pengaturcara mengurus penunjuk secara eksplisit, memudahkan kod dan meningkatkan kebolehbacaan.

Atas ialah kandungan terperinci Mengapa Kaedah Go dengan Penerima Penunjuk Nampaknya Mengubah Suai Argumen Nilai?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan