Dalam Go, kaedah pada T (penerima nilai) mempengaruhi salinan nilai, manakala yang pada T (penerima penunjuk) mengubah nilai sebenar. Perbezaan ini telah membingungkan ramai, yang membawa kepada persoalan tentang mengapa kaedah pada T juga boleh diakses oleh T, tetapi bukan sebaliknya.
Keupayaan untuk memanggil kaedah pada T menggunakan T berpunca daripada prinsip mudah: penunjuk memegang alamat memori sesuatu nilai, dan membatalkan rujukannya mendapatkan semula nilai itu sendiri. Oleh itu, menghantar myT kepada kaedah yang mengambil T adalah bersamaan dengan menyalin gumpalan memori, menjamin akses kepada nilai asas.
Sebaliknya, mendapatkan *T daripada T tidak selalunya mudah. Dalam sesetengah kes, seperti nilai yang disimpan dalam peta, pengembalian fungsi atau antara muka, mendapatkan semula alamat memori statik mungkin terbukti mencabar.
Menurut spesifikasi Go, operan boleh dialamatkan termasuk pembolehubah, arahan penunjuk dan struktur atau struktur tertentu operasi tatasusunan. Walau bagaimanapun, literal komposit adalah pengecualian.
Perbezaan ini mempunyai kebaikan dan keburukan:
Kebaikan:
Keburukan:
Pilihan reka bentuk Go untuk memisahkan set kaedah pada T dan *T adalah berdasarkan pertimbangan praktikal dan membantu memelihara keselamatan dan prestasi memori. Walaupun ia memperkenalkan beberapa pengehadan, ia juga memberikan faedah seperti kejelasan dan pengurangan aliasing. Dengan memahami sebab ini, pembangun boleh menggunakan semantik penerima kaedah Go dengan berkesan untuk mencapai kefungsian yang diingini sambil mematuhi prinsipnya.
Atas ialah kandungan terperinci Mengapa kaedah Go pada T boleh diakses oleh *T, tetapi bukan sebaliknya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!