Marshall 在 Go 中映射到 XML:使用 xml.Marshaler 超越结构
遇到错误“xml: 不支持的类型:map[string] int" 尝试将映射编组为 XML 数据的情况并不罕见。虽然映射可以很好地编组为 JSON,但需要更深入地了解它们在 XML 中的行为。
关键区别在于 XML 本身的性质。与 JSON 将数据视为键值对的嵌套层次结构不同,XML 将数据结构化为元素和属性的层次结构。这种区别禁止直接转换地图。
为了克服这一挑战,需要自定义实现。在这里,我们使用 xml.Marshaler 接口,它允许定制编组逻辑。通过实现 MarshalXML,我们定义了映射序列化的具体方式。
例如,我们可以创建一个名为 StringMap 的自定义类型,它嵌入了 map[string]string 数据结构。在 MarshalXML 中,我们构造 XML 标记(包括开始和结束元素)来表示映射。对于每个键值对,我们生成开始和结束元素,其中键作为元素名称,值作为字符数据。
通过实现此 MarshalXML 方法,StringMap 获得了将自身编组为 XML 格式的能力。现在,编组映射变得简单,仅涉及对 xml.MarshalIndent 的调用。这种自定义方法提供了一种可行的解决方案,而不仅仅是依赖于 XML 封送结构。
以上是如何在 Go 中将映射编组为 XML:使用“xml.Marshaler”超越结构的详细内容。更多信息请关注PHP中文网其他相关文章!