Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Peta Marshal ke XML dalam Go: Beyond Structs dengan `xml.Marshaler`

Cara Peta Marshal ke XML dalam Go: Beyond Structs dengan `xml.Marshaler`

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 13:21:03883semak imbas

How to Marshal Maps to XML in Go: Beyond Structs with `xml.Marshaler`

Peta Marshall ke XML dalam Go: Beyond struct dengan xml.Marshaler

Menghadapi ralat "xml: unsupported type: map[string] int" semasa cuba menyusun peta ke data XML bukan perkara biasa. Walaupun memetakan marshal ke dalam JSON, memahami tingkah laku mereka dengan XML memerlukan penyelaman yang lebih mendalam.

Perbezaan utama terletak pada sifat XML itu sendiri. Tidak seperti JSON, yang menganggap data sebagai hierarki bersarang bagi pasangan nilai kunci, XML menstruktur data sebagai hierarki elemen dan atribut. Perbezaan ini melarang penukaran langsung peta.

Untuk mengatasi cabaran ini, pelaksanaan tersuai diperlukan. Di sini, kami menggunakan antara muka xml.Marshaler, yang membenarkan logik marshaling yang disesuaikan. Dengan melaksanakan MarshalXML, kami mentakrifkan cara khusus peta harus bersiri.

Sebagai contoh, kami boleh mencipta jenis tersuai yang dipanggil StringMap yang membenamkan struktur data rentetan peta. Dalam MarshalXML, kami membina token XML, termasuk elemen permulaan dan akhir, untuk mewakili peta. Untuk setiap pasangan nilai kunci, kami menjana elemen mula dan tamat dengan kunci sebagai nama elemen dan nilai sebagai data aksara.

Dengan melaksanakan kaedah MarshalXML ini, StringMap memperoleh keupayaan untuk mengawal dirinya ke dalam format XML. Kini, peta marshalling menjadi mudah, hanya melibatkan panggilan ke xml.MarshalIndent. Pendekatan tersuai ini menyediakan penyelesaian yang berdaya maju selain bergantung semata-mata pada struct untuk penggabungan XML.

Atas ialah kandungan terperinci Cara Peta Marshal ke XML dalam Go: Beyond Structs dengan `xml.Marshaler`. 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