Dalam Go, membenamkan berbilang struct dengan nama yang sama boleh menimbulkan cabaran, yang berpotensi mengakibatkan ralat medan pendua. Artikel ini meneroka penyelesaian kepada senario ini, membolehkan anda membenamkan struct dengan berkesan tanpa konflik sedemikian.
Pernyataan Masalah
Pertimbangkan coretan kod berikut:
<code class="go">type datastore struct { *sql.Store *file.Store }</code>
Kod ini cuba membenamkan dua struct, *sql.Store dan *file.Store, dengan nama yang sama, Store, dalam struct stor data. Walau bagaimanapun, ia mengakibatkan ralat medan pendua, kerana pengkompil tidak dapat membezakan antara dua medan terbenam.
Penyelesaian
Untuk menyelesaikan isu ini, anda boleh menggunakan alias jenis untuk salah satu struct terbenam. Ini mencipta nama alternatif untuk jenis yang dirujuk, membenarkan ia dibenamkan bersama struct yang lain tanpa menyebabkan sebarang konflik penamaan.
<code class="go">type SqlStore = sql.Store // this is a type alias type datastore struct { *SqlStore *file.Store }</code>
Dalam senario ini, SqlStore menjadi alias untuk sql.Store, memperkenalkan yang baharu nama untuk jenis yang sama. Akibatnya, apabila membenamkan kedua-dua SqlStore dan file.Store dalam stor data, ia diiktiraf sebagai medan yang berbeza, menghapuskan ralat medan pendua.
Faedah Menggunakan Alias Jenis
Dengan menggunakan alias jenis, anda boleh:
Alternatif Pendekatan
Sebagai alternatif, jika membenamkan struct dengan nama yang sama tidak diperlukan, anda boleh mempertimbangkan pilihan berikut:
Atas ialah kandungan terperinci Bagaimanakah anda Membenamkan Berbilang Struktur dengan Nama Yang Sama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!