Penukaran Jenis antara Slices of Structs in Go
Apabila bekerja dengan kepingan struct dalam Go, adalah penting untuk memahami perbezaan antara pelbagai jenis. Dalam kes ini, kami mempunyai jenis berikut:
Soalan 1: Adakah []struct{Name string} dan []struct{Name string json:"a.name" } berbeza?
Ya, mereka berbeza kerana tag JSON json:"a.name". Spesifikasi Go dengan jelas menyatakan bahawa dua jenis struct adalah sama hanya jika mereka mempunyai medan, nama, jenis, tag dan yang sama.
Soalan 2: Adakah ListSociete berbeza daripada []struct{Name string}?
Ya, mereka berbeza kerana ListSociete ialah jenis tersuai manakala []struct{Name string} ialah jenis tanpa nama. Mereka juga mempunyai nama medan yang berbeza.
_Penyelesaian:
Terdapat dua pilihan untuk menukar antara jenis ini:
Pilihan 1: Salin melalui Lelaran
Kaedah ini selamat dan boleh dipercayai, tetapi memerlukan penyalinan yang jelas:
<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>
Pilihan 2: Penukaran Tidak Selamat
Kaedah tidak selamat ini secara langsung menukar struktur data asas:
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
Kaedah ini harus digunakan dengan berhati-hati kerana ia boleh menyebabkan tingkah laku yang tidak dijangka .
_Contoh Taman Permainan: http://play.golang.org/p/lfk7qBp2Gb
Atas ialah kandungan terperinci Cara Menukar Antara Potongan Struktur dengan Selamat dalam Go: Panduan untuk Menaip Penukaran dan Amalan Terbaik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!