Dalam bahasa Go, struktur ialah jenis data yang sangat biasa. Struktur ialah koleksi yang ditakrifkan oleh satu set jenis Setiap struktur boleh mengandungi berbilang medan, setiap satu dengan nama dan jenisnya sendiri. Dalam pembangunan sebenar, kita sering menggunakan penukaran jenis struktur, iaitu memaksa satu jenis struktur kepada jenis struktur yang lain. Seterusnya, artikel ini akan memberi anda pengenalan terperinci tentang pemindahan paksa struktur golang.
Paksa jenis struktur Golang terutamanya mempunyai tiga kaedah berikut:
Dalam bahasa Go, anda boleh menggunakan penegasan jenis (Type Assertion) Untuk melaksanakan paksaan jenis struktur. Penegasan jenis boleh digunakan untuk menentukan sama ada nilai yang disimpan dalam pembolehubah antara muka ialah jenis tertentu, atau untuk menukar jenis antara muka kepada jenis lain. Berikut ialah contoh:
type Person struct { Name string Age int } type Student struct { Name string Age int Grade int } func main() { var p Person p.Name = "张三" p.Age = 22 // 转换为Student类型 s, ok := interface{}(&p).(*Student) if ok { fmt.Println(s.Name, s.Age, s.Grade) } else { fmt.Println("类型转换失败") } }
Dalam kod di atas, kami menghantar struktur jenis Orang p ke dalam struktur jenis Pelajar. Oleh kerana p sebenarnya adalah struktur jenis Orang, operasi penukaran akan gagal. Untuk mengelakkan panik, kami menggunakan kaedah ok-idiom, iaitu, apabila melakukan penukaran jenis paksa, kami juga menentukan sama ada hasil penukaran jenis berjaya Jika berjaya, kembalikan objek baharu selepas penukaran, jika tidak, kembalikan sifar.
Selain menggunakan penegasan jenis untuk penukaran jenis, anda juga boleh menggunakan pensirilan dan penyahsiriran json untuk melaksanakan penukaran paksa jenis struktur. Langkah-langkah khusus adalah seperti berikut:
type Person struct { Name string Age int } type Student struct { Name string Age int Grade int } func main() { var p Person p.Name = "张三" p.Age = 22 // 转换为Student类型 b, _ := json.Marshal(&p) var s Student json.Unmarshal(b, &s) fmt.Println(s.Name, s.Age, s.Grade) }
Dalam kod di atas, kami menghantar struktur jenis Orang p ke dalam struktur jenis Pelajar. Pertama, kita menggunakan fungsi json.Marshal() untuk menukar objek sumber p kepada rentetan json b kemudian, kita menggunakan fungsi json.Unmarshal() untuk menyahsiri rentetan json b ke objek sasaran s. Tidak perlu menentukan sama ada penukaran jenis berjaya kerana fungsi json.Unmarshal() tidak mengembalikan ralat.
Selain menggunakan penegasan jenis dan pensirilan json dan penyahsirilan untuk penukaran jenis, anda juga boleh menyalin bait secara terus. Langkah-langkah khusus adalah seperti berikut:
type Person struct { Name string Age int } type Student struct { Name string Age int Grade int } func main() { var p Person p.Name = "张三" p.Age = 22 // 转换为Student类型 var s Student b, _ := json.Marshal(&p) copy((*(*[1 << 20]byte)(unsafe.Pointer(&s)))[:], b) fmt.Println(s.Name, s.Age, s.Grade) }
Dalam kod di atas, kami menghantar struktur jenis Orang p ke dalam struktur jenis Pelajar. Pertama, kita menggunakan fungsi json.Marshal() untuk menukar struktur sumber p kepada tatasusunan bait b kemudian, kita menggunakan fungsi copy() untuk menyalin tatasusunan bait b ke dalam ruang ingatan struktur sasaran; gunakan json Fungsi .Unmarshal() menyahsiri struktur sasaran untuk melengkapkan penukaran jenis.
Kesimpulan:
Tiga kaedah di atas boleh merealisasikan penukaran jenis struktur Dalam pembangunan sebenar, kita perlu memilih kaedah yang sesuai mengikut keperluan kita sendiri. Perlu diingatkan bahawa apabila menggunakan penukaran struktur jenis penunjuk, perhatian khusus harus diberikan kepada isu-isu seperti penyalinan mendalam nilai penunjuk dan ketepatan jenis.
Atas ialah kandungan terperinci Pengenalan terperinci kepada pemindahan paksa struktur golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!