Mengapakah Saya Tidak Boleh Mendapatkan Alamat Nilai yang Disimpan dalam Antara Muka Go?

Linda Hamilton
Lepaskan: 2024-11-02 09:16:02
asal
882 orang telah melayarinya

 Why Can't I Get the Address of a Value Stored in a Go Interface?

Mengalamatkan Nilai Dalam Antara Muka

Percubaan untuk mendapatkan alamat nilai yang disimpan dalam antara muka sering membawa kepada ralat, seperti "tidak boleh ambil alamat el.Value.(cuba semula)". Untuk memahami batasan ini, kita mesti memeriksa sifat pembolehubah antara muka.

Pembolehubah antara muka terdiri daripada dua bahagian: satu menerangkan jenis nilai yang terkandung dan satu lagi sama ada menyimpan nilai secara langsung atau memegang penunjuk padanya. penyimpanan. Nilai yang disimpan dalam antara muka dimiliki oleh pembolehubah antara muka itu sendiri. Tambahan pula, storan untuk nilai ini boleh digunakan semula apabila antara muka diberikan nilai baharu.

Sebagai contoh:

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>
Salin selepas log masuk

Dalam senario ini, storan yang digunakan untuk memegang integer ialah digunakan semula untuk memegang penuding, menjadikan nilai pada *p sebagai perwakilan integer yang tidak sah bagi penuding baharu. Tingkah laku ini boleh menjejaskan sistem jenis dengan mudah dan atas sebab ini, Go tidak menyediakan cara langsung untuk mendapatkan alamat nilai antara muka (di luar menggunakan pakej yang tidak selamat).

Jika anda memerlukan penunjuk kepada struktur yang disimpan dalam senarai, pertimbangkan untuk menyimpan penunjuk kepada struktur itu sendiri dan bukannya struktur secara langsung. Sebagai alternatif, anda boleh menggunakan *list.Nilai elemen sebagai rujukan kepada struktur yang terkandung.

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Mendapatkan Alamat Nilai yang Disimpan dalam Antara Muka Go?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!