Maison  >  Article  >  développement back-end  >  Comment convertir Go Maps en XML : une approche de marshaleur personnalisée

Comment convertir Go Maps en XML : une approche de marshaleur personnalisée

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 08:47:30139parcourir

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

Marshall Go Maps en XML

La conversion des cartes Go en JSON est simple. Cependant, tenter d'effectuer la même opération pour XML peut entraîner une erreur :

xml : type non pris en charge : map[string]int

Solution : Utilisation d'un marshaler XML personnalisé

Contrairement à JSON, le marshalling XML ne prend pas automatiquement en charge les cartes. Pour contourner cette limitation, un xml.Marshaler personnalisé peut être implémenté pour votre type de carte :

<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>

Maintenant, vous pouvez simplement appeler xml.MarshalIndent(...) pour marshaler la carte en XML :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn