Rumah >pembangunan bahagian belakang >Golang >Cara Menukar Peta Go kepada XML: Pendekatan Marshaler Tersuai

Cara Menukar Peta Go kepada XML: Pendekatan Marshaler Tersuai

Susan Sarandon
Susan Sarandonasal
2024-10-31 08:47:30222semak imbas

How to Convert Go Maps to XML: A Custom Marshaler Approach

Peta Marshall Go kepada XML

Menukar peta Go kepada JSON adalah mudah. Walau bagaimanapun, percubaan untuk melakukan operasi yang sama untuk XML boleh membawa kepada ralat:

xml: unsupported type: map[string]int

Penyelesaian: Menggunakan XML Marshaler Tersuai

Tidak seperti JSON, XML marshalling sememangnya tidak menyokong peta. Untuk mengatasi had ini, xml.Marshaler tersuai boleh dilaksanakan untuk jenis peta anda:

<code class="go">// StringMap is a map[string]string.
type StringMap map[string]string

// StringMap marshals into XML.
func (s StringMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error {

    tokens := []xml.Token{start}

    for key, value := range s {
        t := xml.StartElement{Name: xml.Name{"", key}}
        tokens = append(tokens, t, xml.CharData(value), xml.EndElement{t.Name})
    }

    tokens = append(tokens, xml.EndElement{start.Name})

    for _, t := range tokens {
        err := e.EncodeToken(t)
        if err != nil {
            return err
        }
    }

    // flush to ensure tokens are written
    return e.Flush()
}</code>

Kini, anda boleh panggil xml.MarshalIndent(...) untuk menyusun peta menjadi XML:

<code class="go">output, err := xml.MarshalIndent(data, "", "  ")</code>

Atas ialah kandungan terperinci Cara Menukar Peta Go kepada XML: Pendekatan Marshaler Tersuai. 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