go - 初始化从 XML 创建的嵌套匿名结构到结构转换器
问题描述
以下是从 XML 到 Go 的结构转换的输出
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"}}}}
错误是:field:value 和 value 初始值设定项的混合
解决方案
嵌入式结构的初始化类似于常规结构,请参阅复合文字。如果指定字段名称,则必须指定所有字段。
对于嵌入结构,字段名称是嵌入类型的名称。
所以你的复合文字变成:
metinfo := Metadata{Ns2: "http://test.com", PasMetadata: PasMetadata{SimpleValue: SimpleValue{Entry: Entry{Key: "testcode", Value: "testvalue"}}}}
与您的不同之处在于始终设置字段名称。具体来说:
PasMetadata: PasMetadata{...}
SimpleValue: SimpleValue{...}
Entry: Entry{...}
推荐阅读
- ios - Xcode 在签署应用程序时没有选择正确的证书
- r - R 中的 shell() 是否记得前面的命令?
- c# - 如何序列化具有 xml 元素作为属性的类,没有重复节点?
- html - Chrome 仍然错误地确定页面使用不同的语言并提供翻译
- c++ - 使用我自己的 dll 中的类时出现不完整的类型错误
- php - 不断收到“未捕获的错误:无法使用 mysqli_result 类型的对象作为数组”
- javascript - res.redirect 和 res.sendfile 有什么区别?
- azure - Kubernetes 虚拟节点池意外 VM 费用
- html - 使用 CSS 选择特定列表的标记(项目符号、编号等)
- php - 在 n 秒后自动从 Woocommerce 感谢您重定向到内部页面(主页)