【问题标题】:Iterating nested structs in golang on a template在模板上迭代 golang 中的嵌套结构
【发布时间】:2015-09-07 01:29:14
【问题描述】:

我有以下代码,并想迭代模板中的主题,但对于我来说,我似乎无法摆脱它是一个嵌套容器的事实。

type ThemeList struct {
    XMLName xml.Name `xml:"Themes"`
    Themes []Theme `xml:"Theme"`
}

type Theme struct {
    XMLName xml.Name `xml:"Theme"`
    Name string `xml:"Name,attr"`
    Page string `xml:"Page,attr"`
    Tag string `xml:"Tag,attr"`
    Day string `xml:"Day,attr"`
}

// Fetch the current XML document and return the Themelist[]
func openXML(filename string) ThemeList {

    xmlFile, _ := os.Open(filename)
    defer xmlFile.Close()
    XMLdata, _ := ioutil.ReadAll(xmlFile)

    var t ThemeList
    xml.Unmarshal(XMLdata, &t)

    return t
}

如何在每个主题都是单个列表项的一部分的 {{range}} 中输出这些内容?输出将使用模板中的 .Name .Tag 等等,就像我查看它们一样。

【问题讨论】:

  • 也许我不需要在这里传递整个主题结构,因为它只是一个主题容器?只是因为传入 xml 的结构才需要它。

标签: templates go range


【解决方案1】:

使用以下模板:

<ul>{{range .Themes}}
  <li>{{.Name}} {{.Tag}}{{end}}
</ul>

并使用数据参数作为*ThemeList 执行它。

Playground Example

【讨论】:

  • 谢谢!我还发现,我只能传递底层的 []Theme 集合。我看到你基本上使用范围指示器中的 .Themes 做了同样的事情。
  • 为什么要在这里使用指针而不是只使用复制变量?我相信你知道一个很好的理由,但我只是从这里开始,想更好地理解。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 2022-09-27
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2014-08-19
相关资源
最近更新 更多