Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang中缺少Xml标记_Go - Fatal编程技术网

Golang中缺少Xml标记

Golang中缺少Xml标记,go,Go,我是golang的新手,我正在尝试制作一个使用嵌套标记的xml 因此,我的代码是 type MyXml struct { XMLName xml.Name `xml:"myXml"` Id int `xml:"id,attr"` NewXml } type NewXml struct { XMLName xml.Name `xml:"newXml"` OneMoreXml } type OneMoreXml struct {

我是golang的新手,我正在尝试制作一个使用嵌套标记的xml

因此,我的代码是

type MyXml struct {
    XMLName xml.Name `xml:"myXml"`
    Id      int      `xml:"id,attr"`
    NewXml
}
type NewXml struct {
    XMLName xml.Name `xml:"newXml"`
    OneMoreXml
}

type OneMoreXml struct {
    Msg interface{} `xml:"oneMore"`
}

type Child struct {
    Param1 string `xml:"Param1"`
}

func main() {

    baseXml := &Child{Param1: "Param1"}
    retXml := GetXml(baseXml)
    fmt.Println("my xml is", retXml)

}
func MarshallXml(reqString interface{}) (newXml string) {
    xmlBody, err := xml.Marshal(reqString)
    if err != nil {
        fmt.Printf("error: %v\n", err)
    }
    newXml = string(xmlBody)
    //fmt.Println(newXml)
    return
}
func GetXml(baseXml interface{}) (finalXml string) {

    startXml := new(MyXml)
    startXml.Id = 1
    startXml.Msg = baseXml
    finalXml = MarshallXml(startXml)
    return

}

但是在我的输出xml标记中,缺少了newXml。我用各种方法尝试过,但总是缺少一些标签。我想我没有正确理解struct标记。所以我在上面的代码中做错了什么,我缺少了golang struct的哪一个基本概念

我查看了xml包文档,他们说“一个匿名结构字段的处理方式就好像它的值字段是外部结构的一部分”。在您的例子中,所有字段都被序列化,就好像它们是MyXml的一部分一样

NewXml没有任何字段(您只需给它一个名称,但没有其他字段),因此不会对它进行序列化。 如果向其添加新字段,则可以看到它已序列化

type NewXml struct {
    XMLName xml.Name `xml:"newXml"`
    Test    int
    OneMoreXml
}

在您的示例中,我希望有一个或多个标记作为测试标记的子标记,而不是两个标记都是myxml的子标记。我希望xml如下所示:param1然后我认为您需要有一个或多个xml的命名实例,而不仅仅是一个匿名结构。如图所示:它的工作谢谢,但你能解释一下它有什么不同吗?或者你可以共享一些相同的链接。根据位于的文档,“一个匿名结构域被当作它的值的域是外部结构的一部分来处理。”我认为这句话的意思是,NewXml没有被“视”为MyXml的域:相反,所有NexXml的域都被当作MyXml的一部分来处理。在最初的情况下,这导致了OneMoreXml的“Msg”字段。