Rumah >pembangunan bahagian belakang >Golang >Mengapa json.Unmarshal Kadang-kadang Mengembalikan Peta Daripada Struct?

Mengapa json.Unmarshal Kadang-kadang Mengembalikan Peta Daripada Struct?

Linda Hamilton
Linda Hamiltonasal
2024-10-25 17:17:02271semak imbas

Why Does json.Unmarshal Sometimes Return a Map Instead of a Struct?

Merungkai Percanggahan dalam json.Unmarshal Output

json.Unmarshal ialah fungsi serba boleh yang mengisi struktur data dengan nilai daripada rentetan JSON. Walau bagaimanapun, kebingungan biasa timbul apabila output yang dijangkakan berbeza daripada yang sebenar, dengan struktur yang terhasil ialah peta dan bukannya struct yang dimaksudkan. Untuk membongkar percanggahan ini, kami menyelami kod dan meneroka mekanisme asas.

Dalam contoh yang diberikan, fungsi "buruk" memperuntukkan antara muka{} bernama ping kepada struct Ping. Walau bagaimanapun, apabila json.Unmarshal digunakan, ia menghadapi antara muka abstrak tanpa maklumat jenis konkrit. Akibatnya, ia mentafsirkan JSON yang masuk sebagai peta, yang menerangkan tingkah laku yang diperhatikan.

Untuk membetulkan perkara ini, kami perlu menyediakan json.Unmarshal dengan struct yang dijangkakan secara eksplisit. Ini boleh dicapai dengan memberikan antara muka{} kepada penuding kepada struct Ping. Dengan membuat perubahan halus ini, kami menyampaikan kepada fungsi jenis asas yang sepatutnya berfungsi dengannya. Sebagai alternatif, kita boleh menggunakan pantulan untuk mencipta penuding baharu pada struct Ping dan menyahsirikannya, seterusnya menyalin nilai kembali ke ping.

Dengan pengubahsuaian ini, fungsi json.Unmarshal berjaya menyusun JSON ke dalam yang dikehendaki Ping struct, menghapuskan percanggahan dan memadankan jangkaan kami. Dengan memahami selok-belok fungsi, kami boleh memanfaatkan kuasanya untuk mengisi struktur data dengan pasti dan tepat.

Atas ialah kandungan terperinci Mengapa json.Unmarshal Kadang-kadang Mengembalikan Peta Daripada Struct?. 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