Struktur dengan Berbilang Teg JSON
Dalam senario di mana respons JSON diterima daripada pelayan dan perlu dibongkar ke dalam struct, mungkin terdapat keperluan untuk mengubah suai teg JSON sebelum menghantarnya ke pelayan lain. Lazimnya, ini melibatkan penciptaan struct baharu dan menyalin data secara manual.
Walau bagaimanapun, perlu dipertimbangkan sama ada boleh mentakrifkan berbilang teg JSON untuk satu struct. Percubaan untuk melampirkan berbilang tag pada medan yang sama secara langsung dalam definisi struct, seperti dalam contoh di bawah, tidak disokong:
type Foo struct { Name string `json:"name" json:"employee_name"` Age int `json:"age" json:"-"` }
Sebaliknya, penyelesaian yang mungkin terletak pada pemutus antara dua struct yang dibentangkan secara serupa (padanan nama, jenis, dan susunan medan). Walaupun pendekatan ini secara amnya tidak digalakkan, ia boleh digunakan dengan berhati-hati untuk mencapai hasil yang diingini.
type Foo struct { Name string `json:"name"` Age int `json:"age"` } type Bar struct { Name string `json:"employee_name"` // Age is not exported age int `json:"-"` } func main() { foo := Foo{} // Unmarshal JSON err := json.Unmarshal([]byte("{\"name\":\"Sam\",\"age\":20}"), &foo) if err != nil { log.Fatal(err) } // Cast between types, overwriting internal representation bar := (*Bar)(unsafe.Pointer(&foo)) // Marshal modified JSON data, err := json.Marshal(bar) if err != nil { log.Fatal(err) } // Example JSON: {"employee_name":"Sam"} fmt.Println(string(data)) }
Adalah penting untuk ambil perhatian bahawa pendekatan pemutus ini harus digunakan dengan bijak. Struktur kedua hendaklah tidak dieksport untuk mengelakkan penggunaan yang tidak diingini di luar konteks tertentu.
Atas ialah kandungan terperinci Bolehkah Berbilang Tag JSON Ditakrifkan untuk Medan Struktur Go Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!