Rumah >pembangunan bahagian belakang >Golang >Mengapa Nilai Bukan Penunjuk dalam Antara Muka Go Tidak Boleh Diatasi?

Mengapa Nilai Bukan Penunjuk dalam Antara Muka Go Tidak Boleh Diatasi?

Barbara Streisand
Barbara Streisandasal
2024-12-06 01:33:10382semak imbas

Why Are Non-Pointer Values in Go Interfaces Not Addressable?

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!

Kenyataan:
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