Marshall Go 映射到 XML
将 Go 映射转换为 JSON 非常简单。但是,尝试对 XML 执行相同的操作可能会导致错误:
xml: unsupported type: map[string]int
解决方案:使用自定义 XML 封送拆收器
与 JSON 不同,XML 编组本身并不支持映射。要解决此限制,可以为您的地图类型实现自定义 xml.Marshaler:
<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>
现在,您只需调用 xml.MarshalIndent(...) 将地图编组为 XML:
<code class="go">output, err := xml.MarshalIndent(data, "", " ")</code>
以上是如何将 Go 映射转换为 XML:自定义封送拆收器方法的详细内容。更多信息请关注PHP中文网其他相关文章!