初始化从 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 初始值设定项的混合


湖上湖
浏览 123回答 1
1回答

SMILET

嵌入式结构的初始化类似于常规结构,请参阅复合文字。如果指定字段名称,则必须指定所有字段。对于嵌入结构,字段名称是嵌入类型的名称。所以你的复合文字变成:metinfo := Metadata{Ns2: "http://test.com", PasMetadata: PasMetadata{SimpleValue: SimpleValue{Entry: Entry{Key: "testcode", Value: "testvalue"}}}}与您的不同之处在于始终设置字段名称。具体来说:PasMetadata: PasMetadata{...}SimpleValue: SimpleValue{...}Entry: Entry{...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go