以下是Go的XML到struct转换的输出
type Metadata struct {
XMLName xml.Name `xml:"metadata"`
Text string `xml:",chardata"`
Ns2 string `xml:"ns2,attr"`
PasMetadata struct {
Text string `xml:",chardata"`
SimpleValue struct {
Text string `xml:",chardata"`
Entry struct {
Text string `xml:",chardata"`
Key string `xml:"key"`
Value string `xml:"value"`
} `xml:"entry"`
} `xml:"simple_value"`
} `xml:"pas_metadata"`}
但是基于对嵌套匿名结构的建议,创建了如下的其他结构
type PasMetadata struct {
Text string `xml:",chardata"`
SimpleValue `xml:"simple_value"`
}
type SimpleValue struct {
Text string `xml:",chardata"`
Entry `xml:"entry"`
}
type Entry struct {
Text string `xml:",chardata"`
Key string `xml:"key"`
Value string `xml:"value"`
}
type Metadata struct {
XMLName xml.Name `xml:"metadata"`
Text string `xml:",chardata"`
Ns2 string `xml:"ns2,attr"`
PasMetadata `xml:"pas_metadata"`
}
现在使用以下语句初始化时出现错误
metinfo := Metadata{Ns2: "http://test.com", PasMetadata{SimpleValue{Entry{Key: "testcode", Value: "testvalue"}}}}
错误是:字段:值和值初始值设定项的混合
答案 0 :(得分:0)
embedded structs的初始化与常规的类似,请参见composite literals。如果指定字段名称,则必须全部指定。
对于嵌入式结构,字段名称是嵌入式类型的名称。
因此您的复合文字变为:
metinfo := Metadata{Ns2: "http://test.com", PasMetadata: PasMetadata{SimpleValue: SimpleValue{Entry: Entry{Key: "testcode", Value: "testvalue"}}}}
与您的区别在于,始终设置字段名称。具体来说:
PasMetadata: PasMetadata{...}
SimpleValue: SimpleValue{...}
Entry: Entry{...}