Bagaimana untuk Menukar Sekeping Struktur Tanpa Nama kepada Sekeping Struktur Tertakrif di Golang?

Susan Sarandon
Lepaskan: 2024-10-26 16:33:30
asal
525 orang telah melayarinya

How to Convert a Slice of Anonymous Structs to a Slice of Defined Structs in Golang?

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(&amp;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!

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