Rumah >pembangunan bahagian belakang >Golang >Mengapakah medan `Num` saya diabaikan apabila menyahmarshall JSON kepada struct terbenam dalam Go?

Mengapakah medan `Num` saya diabaikan apabila menyahmarshall JSON kepada struct terbenam dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-04 15:03:42257semak imbas

Why is my `Num` field ignored when unmarshalling JSON to an embedded struct in Go?

Menghapuskan JSON kepada Struktur Terbenam dalam Go

Penyahserialisasian data JSON ke dalam struktur terbenam boleh menimbulkan cabaran di Golang. Ambil contoh struct:

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}</code>

Apabila menggunakan json.Unmarshal(data, &Outer{}), hanya medan Inner unmarshaled, mengabaikan medan Num. Untuk memahami sebab ini berlaku, adalah penting untuk ambil perhatian bahawa Inner dibenamkan dalam Outer.

Semasa JSON unmarshaler, pustaka memanggil unmarshaler on Outer, yang seterusnya memanggil unmarshaler on Inner. Akibatnya, fungsi Inner.UnmarshalJSON menerima keseluruhan rentetan JSON, yang diproses untuk Inner sahaja.

Untuk menyelesaikan isu ini, jadikan Inner medan eksplisit dalam Outer. Ini memastikan bahawa semasa pembongkaran JSON, medan Dalam dinyahmarshalih dengan betul dan medan Num ditetapkan berdasarkan data JSON:

<code class="go">Outer struct {
    I Inner // Make Inner an explicit field
    Num int `json:"Num"`
}</code>

Pengubahsuaian ini membolehkan pembongkaran data JSON yang betul ke dalam struktur Luar, termasuk kedua-dua medan Dalam dan Num.

Atas ialah kandungan terperinci Mengapakah medan `Num` saya diabaikan apabila menyahmarshall JSON kepada struct terbenam dalam Go?. 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