Penukaran Jenis antara Potongan Struktur di Golang
Siasatan ini tertumpu pada penukaran jenis antara kepingan struktur. Khususnya, kami menyasarkan untuk menukar kepingan struct tanpa nama kepada kepingan struct yang ditakrifkan.
Isu Asas
Isu ini timbul disebabkan oleh perbezaan antara dua jenis struct:
- Societe struct dengan satu medan bernama Name
- Anonymous struct dengan satu field bernama Name tag dengan json:"a.name"
Kehadiran tag mencipta jenis struct yang berbeza, menghalang penukaran langsung.
Pilihan Penyelesaian
Pilihan 1: Lelaran dan Penyalinan
- Lelaran melalui kedua-dua kepingan dan salin secara manual setiap medan daripada struct tanpa nama ke struct Societe.
- Pendekatan ini selamat dan boleh dipercayai tetapi kurang cekap kerana sifat berulang.
<code class="go">ls := make(ListSociete, len(res))
for i := 0; i < len(res); i++ {
ls[i].Name = res[i].Name
}
return ls, nil</code>
Salin selepas log masuk
Pilihan 2: Penukaran Tidak Selamat
- Penukaran jenis langsung menggunakan penunjuk tidak selamat.
- Kaedah ini memintas pemeriksaan jenis dan boleh mengakibatkan ralat masa jalan jika struktur data asas berubah secara tidak dijangka.
-
Awas: Gunakan pendekatan ini dengan berhati-hati kerana ia menjejaskan keselamatan jenis.
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
Salin selepas log masuk
Amalan Terbaik
- Tentukan struct yang sesuai untuk diwakili model data.
- Gunakan penukaran jenis eksplisit jika perlu untuk mengekalkan keselamatan jenis.
- Pilih pendekatan lelaran dan penyalinan yang selamat untuk penukaran yang boleh dipercayai.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Sekeping Struktur Tanpa Nama kepada Sekeping Struktur Tertakrif di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!