Mengambil Alamat Nilai Di Dalam Antara Muka
Dalam konteks bahasa pengaturcaraan Go, antara muka bertindak sebagai kontrak, mentakrifkan set kaedah yang mesti dilaksanakan oleh sesuatu jenis. Apabila nilai diberikan kepada antara muka, ia dibalut dengan nilai antara muka. Walau bagaimanapun, nilai antara muka itu sendiri tidak menyimpan nilai sebenar tetapi mempunyai rujukan kepadanya.
Oleh itu, percubaan untuk mengambil alamat nilai di dalam antara muka menggunakan operator & akan mengakibatkan ralat, seperti yang ditunjukkan dalam coretan kod berikut:
<code class="go">import "container/list" type retry struct{} var el = list.Element{Value: retry{}} p := &el.Value.(retry) // Compilation error: cannot take the address of el.Value.(retry)</code>
Ralat ini berpunca daripada fakta bahawa nilai di dalam antara muka dimiliki oleh nilai antara muka itu sendiri dan storannya boleh digunakan semula apabila nilai baharu diberikan kepada antara muka . Mengubah suai nilai pada alamat yang diperoleh akan menjejaskan nilai antara muka secara langsung, yang tidak diingini dan boleh membawa kepada tingkah laku yang tidak dijangka.
Untuk menangani situasi ini, terdapat pendekatan alternatif yang tersedia:
Simpan Penunjuk Daripada Nilai:
Daripada menyimpan nilai struct terus dalam antara muka, seseorang boleh menyimpan penunjuk kepada struct tersebut. Ini memastikan bahawa penuding kekal sah walaupun nilai antara muka berubah.
Gunakan Rujukan Elemen:
Pilihan lain ialah lulus *senarai.Nilai elemen sebagai rujukan kepada struktur yang terkandung. Ini secara berkesan memberikan akses tidak langsung kepada nilai struct tanpa melanggar keselamatan jenis Go.
Atas ialah kandungan terperinci Bolehkah Anda Mengambil Alamat Nilai Di Dalam Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!