Kaedah Go Receiver Memanggil Kekeliruan Sintaks
Bahasa pengaturcaraan Go menyediakan dua jenis kaedah penerima: penerima nilai dan penerima penunjuk. Penerima nilai beroperasi secara langsung pada nilai jenis, manakala penerima penunjuk beroperasi pada penunjuk kepada nilai jenis.
Dokumentasi untuk Go menyatakan bahawa kaedah nilai boleh digunakan pada kedua-dua penunjuk dan nilai, tetapi penunjuk kaedah hanya boleh digunakan pada penunjuk. Ini kerana kaedah penuding boleh mengubah suai penerima, dan menggunakannya pada salinan nilai akan membuang pengubahsuaian tersebut.
Walau bagaimanapun, contoh kod yang disediakan berjaya memanggil kaedah penunjuk pada nilai. Untuk memahami mengapa ini sah, kita perlu merujuk kepada spesifikasi bahasa:
A method call x.m() is valid if the method set of (the type of) x contains m and the argument list can be assigned to the parameter list of m. If x is addressable and &x's method set contains m, x.m() is shorthand for (&x).m().
Ini bermakna jika pembolehubah boleh dialamatkan (iaitu, ia boleh diluluskan melalui rujukan), kita boleh menggunakan kaedah penunjuk pada ia seolah-olah ia adalah penunjuk. Dalam contoh kod, pembolehubah vAge diisytiharkan sebagai nilai, tetapi ia boleh ditangani kerana ia adalah pembolehubah jenis bernama. Oleh itu, panggilan vAge.Set(10) adalah bersamaan dengan (&vAge).Set(10), yang sah kerana &vAge ialah penunjuk kepada vAge.
Atas ialah kandungan terperinci ## Mengapa Saya Boleh Menghubungi Kaedah Penerima Penunjuk pada Nilai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!