Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah `json.Unmarshal` Mengendalikan Antara Muka, dan Mengapa Pengisytiharan Jenis Eksplisit Penting?

Bagaimanakah `json.Unmarshal` Mengendalikan Antara Muka, dan Mengapa Pengisytiharan Jenis Eksplisit Penting?

Barbara Streisand
Barbara Streisandasal
2024-12-02 13:23:11551semak imbas

How Does `json.Unmarshal` Handle Interfaces, and Why Is Explicit Type Declaration Crucial?

Memahami Gelagat JSON Unmarshal

Apabila cuba menyahmarshal data JSON menggunakan json.Unmarshal, adalah penting untuk memahami cara pakej berinteraksi dengan jenis pembolehubah .

Antara Muka Fallacy

Dengan mengandaikan bahawa json.Unmarshal secara automatik menggunakan struct konkrit yang dikaitkan dengan antara muka adalah salah tanggapan biasa. Pakej memerlukan panduan yang jelas tentang jenis unmarshaling yang diingini.

Contoh: Hilang dalam Terjemahan

Pertimbangkan contoh kod yang disediakan:

type Foo struct {
    Bar string `json:"bar"`
}

func getFoo() interface{} {
    return Foo{"bar"}
}

The niat adalah untuk mendapatkan getFoo() mengembalikan struct Foo, tetapi kerana ia diberikan kepada antara muka, ia dirawat sebagai peta. Ini kerana apabila antara muka diserahkan kepada json.Unmarshal, pakej mentafsirkannya sebagai antara muka kosong dan menjana peta untuk objek JSON.

Penyelesaian: Pengisytiharan Jenis Eksplisit

Untuk menyelesaikan isu ini, hantar penuding secara eksplisit kepada jenis struct yang dikehendaki dalam antara muka:

func getFoo() interface{} {
    return &Foo{"bar"}
}

Kini, apabila json.Unmarshal menerima antara muka, ia mengenal pasti penuding kepada struct dan menyahmarshal data JSON ke dalam medan struct dengan betul.

Key Takeaway :

Ingat bahawa json.Unmarshal bergantung pada maklumat jenis eksplisit yang diberikan untuk menentukan destinasi unmarshaling. Jika anda mahu ia menggunakan struct tertentu, anda mesti secara eksplisit menghantar nilai jenis itu atau penunjuk kepada jenis itu dalam antara muka.

Atas ialah kandungan terperinci Bagaimanakah `json.Unmarshal` Mengendalikan Antara Muka, dan Mengapa Pengisytiharan Jenis Eksplisit Penting?. 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