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

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

Susan Sarandon
发布: 2024-10-31 08:47:30
原创
243 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板