Membenamkan Struktur: Bila Perlu Mengutamakan Penunjuk
Apabila membenamkan satu struct dalam yang lain, terdapat dua pilihan: menggunakan penunjuk atau nilai terbenam . Untuk membimbing keputusan ini, adalah penting untuk memahami spesifikasi dan mempertimbangkan kelebihan setiap pendekatan.
Penunjuk lwn. Nilai Terbenam
Mengikut spesifikasi Go, sebuah medan tanpa nama (juga dikenali sebagai medan terbenam) boleh diisytiharkan sebagai nama jenis atau sebagai penunjuk kepada nama jenis bukan antara muka. Ini bermakna anda mempunyai pilihan untuk menggunakan jenis log.Logger atau penunjuk *log.Logger untuk medan Logger dalam contoh berikut:
<code class="go">type Job struct { Command string *log.Logger }</code>
Faedah Penunjuk
Artikel "Membenamkan dalam Go" oleh Eric Urban menyerlahkan kelebihan membenamkan penuding, yang dirujuk sebagai "membenamkan penuding sebelah." Ini termasuk:
Contoh Pembenaman Penunjuk
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
Dalam contoh ini, jenis Renderer membenamkan Peta Bit oleh penunjuk. Ini bermakna berbilang tika Renderer boleh berkongsi satu tika Bitmap dan menyesuaikan tingkah laku mereka secara bebas.
Had Teknikal
Perlu ambil perhatian bahawa anda tidak boleh menggunakan penunjuk kepada penunjuk atau penunjuk kepada antara muka sebagai medan tanpa nama. Sekatan ini berpunca daripada fakta bahawa jenis ini tidak mempunyai kaedah, yang merupakan aspek utama pembenaman. Kaedah dipromosikan daripada jenis terbenam kepada jenis benam, membolehkan anda mengaksesnya secara terus.
Atas ialah kandungan terperinci Apabila Membenamkan Struktur dalam Go: Penunjuk atau Nilai Terbenam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!