Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengenalan terperinci kepada pemindahan paksa struktur golang

Pengenalan terperinci kepada pemindahan paksa struktur golang

PHPz
PHPzasal
2023-03-30 09:08:011883semak imbas

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:

Kaedah 1: Gunakan penegasan jenis

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.

Kaedah 2: Tukar kepada json dan kemudian ke dalam struktur sasaran

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:

  1. Sirikan objek sumber ke dalam rentetan json.
  2. Deserialisasi rentetan json ke dalam objek sasaran dan penukaran selesai.
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.

Kaedah 3: Salinan bait langsung

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:

  1. Sirikan struktur sumber pertama untuk mendapatkan kepingan bait.
  2. Salin kepingan bait ke dalam struktur sasaran.
  3. Nyahserialisasi struktur sasaran dan penukaran selesai.
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!

Kenyataan:
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