首页 >后端开发 >Golang >如何将 Go 映射转换为 XML:自定义封送拆收器方法

如何将 Go 映射转换为 XML:自定义封送拆收器方法

Susan Sarandon
Susan Sarandon原创
2024-10-31 08:47:30269浏览

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

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn