我正在尝试创建一个实现MarshalXML输出的XML,但目前我遇到了一些问题。
我用于存储数据的结构是:
我想要的是: 如果“Preconstructed”字段没有设置,就不要放置
所以我所做的是:
“而且,如果我用它对单个版本实体进行编码,显然它可以工作。但是,如果我尝试对版本实体数组进行编码,就会出现以下错误:”
“数组大约有200个条目。”
“我不明白的是:”
- “为什么只有在我尝试自定义xml时才会出现堆栈溢出问题,这种情况下还尝试删除空标记,以便‘节省空间’?” - “最好的方法是什么?有人能解释一下如何为go实现自定义XML Marshaler吗?我找到了很多JSON marshal的例子,但几乎没有关于XML的。”
我用于存储数据的结构是:
type Edition struct {
Launch string `xml:"launch" json:"launch"`
Code string `xml:"code" json:"code"`
Names []NameNode `xml:"names>name"`
Cards CardsComposition `xml:"cards" json:"cards,omitempty"`
Preconstructed PreconstructedInfo `xml:"preconstructed" json:"preconstructed,omitempty"`
Vault *struct{} `xml:"vault" json:"vault"`
Online *struct{} `xml:"online" json:"online"`
}
我想要的是: 如果“Preconstructed”字段没有设置,就不要放置
<preconstructed>
标签(使用标准编组器时,即使为空,它也会被放置)。所以我所做的是:
func (preconstructed PreconstructedInfo) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
if (PreconstructedInfo{} == preconstructed) {
return nil
}
return e.EncodeElement(preconstructed, start)
}
“而且,如果我用它对单个版本实体进行编码,显然它可以工作。但是,如果我尝试对版本实体数组进行编码,就会出现以下错误:”
runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow
“数组大约有200个条目。”
“我不明白的是:”
- “为什么只有在我尝试自定义xml时才会出现堆栈溢出问题,这种情况下还尝试删除空标记,以便‘节省空间’?” - “最好的方法是什么?有人能解释一下如何为go实现自定义XML Marshaler吗?我找到了很多JSON marshal的例子,但几乎没有关于XML的。”