go之初始化从XML创建的嵌套匿名结构到结构转换器
yjmyzz
阅读:53
2025-06-02 22:19:02
评论:0
以下是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"}}}}
错误是:字段:值和值初始值设定项的混合
请您参考如下方法:
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{...} 声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



