Marshall Go Maps in XML
Die Konvertierung von Go Maps in JSON ist unkompliziert. Der Versuch, denselben Vorgang für XML auszuführen, kann jedoch zu einem Fehler führen:
xml: nicht unterstützter Typ: map[string]int
Lösung: Verwendung eines benutzerdefinierten XML-Marshalers
Im Gegensatz zu JSON unterstützt XML-Marshalling Karten grundsätzlich nicht. Um diese Einschränkung zu umgehen, kann ein benutzerdefinierter xml.Marshaler für Ihren Kartentyp implementiert werden:
<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>
Jetzt können Sie einfach xml.MarshalIndent(...) aufrufen, um die Karte in XML zu Marshallen:
<code class="go">output, err := xml.MarshalIndent(data, "", " ")</code>
Das obige ist der detaillierte Inhalt vonSo konvertieren Sie Go Maps in XML: Ein benutzerdefinierter Marshaler-Ansatz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!