Menggunakan Jenis Casting dalam Struktur Tidak Dieksport
Dalam Go, anda tidak boleh mentakrifkan berbilang teg JSON untuk medan yang sama dalam struct. Walau bagaimanapun, terdapat penyelesaian menggunakan penghantaran antara struct yang tidak dieksport.
Mula-mula, buat dua struct berstruktur yang serupa dengan teg JSON yang berbeza, seperti dalam contoh anda:
type Foo struct { Name string `json:"name"` Age int `json:"age"` } type Bar struct { Name string `json:"employee_name"` // Age omitted with backtick syntax Age int `json:"-"` }
Sekarang, jadikan Bar tidak dieksport dengan memulakan namanya dengan huruf kecil:
type bar struct { Name string `json:"employee_name"` Age int `json:"-"` }
Untuk mengubah daripada Foo kepada bar, hantar Foo ke *bar, seperti yang ditunjukkan di bawah:
f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) // b now has the modified JSON tags
Awas:
Contoh:
package main import "fmt" import "unsafe" type Foo struct { Name string `json:"name"` Age int `json:"age"` } type bar struct { Name string `json:"employee_name"` Age int `json:"-"` } func main() { f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) fmt.Println(b.Name, b.Age) // Output: Sam 0 // Changing f.Age affects b.Age f.Age = 30 fmt.Println(b.Name, b.Age) // Output: Sam 30 }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengatasi Sekatan Tag JSON Go Menggunakan Struktur dan Jenis Casting yang Tidak Dieksport?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!