Rumah >pembangunan bahagian belakang >Golang >Mengapa Nilai Bukan Penunjuk dalam Antara Muka Go Tidak Boleh Diatasi?
Mengapa Antara Muka dengan Nilai Bukan Penunjuk Tidak Boleh Dialamatkan dalam Go
Dokumentasi antara muka Golang mencadangkan bahawa nilai yang disimpan dalam antara muka tidak boleh ditangani, serupa kepada elemen dalam peta. Ini menimbulkan persoalan mengapa nilai antara muka tidak boleh ditangani.
tl;dr: Mengekalkan Integriti Jenis
Untuk mengekalkan integriti jenis, nilai bukan penuding disimpan dalam antara muka tidak boleh ditangani. Pertimbangkan penunjuk (*A) yang menunjuk kepada nilai jenis A dalam antara muka. Jika jenis yang berbeza (cth., B) disimpan dalam antara muka kemudiannya, penunjuk kepada A akan menjadi tidak sah, menjejaskan keselamatan jenis.
Mengatasi Implikasi
Jika antara muka nilai boleh ditangani, ia akan membawa kepada kesan yang tidak dijangka. Sebagai contoh, dengan antara muka I, dua jenis A dan B melaksanakan I, dan A yang disimpan dalam contoh I, mengambil alamat nilai yang disimpan akan membenarkan pengubahsuaian kepada nilai asal melalui alamat tersebut. Walau bagaimanapun, apabila nilai B lain disimpan dalam I, penuding kepada nilai A asal akan menjadi tidak sah.
Kaveat Penunjuk
Walaupun nilai antara muka bukan penuding tidak boleh dialamatkan, adalah mungkin untuk mendapatkan penunjuk kepada salinan nilai menggunakan pemutus eksplisit, cth., var a2 A = i.(A) diikuti dengan var aPtr *A = &a2.
Kesimpulan
Ketidakbolehalamatan nilai antara muka memastikan integriti jenis dengan menghalang rujukan penunjuk tidak sah apabila nilai jenis berbeza disimpan dalam antara muka .
Atas ialah kandungan terperinci Mengapa Nilai Bukan Penunjuk dalam Antara Muka Go Tidak Boleh Diatasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!