我是Go的初学者,正在教自己一些网络开发。我试图在模板文件中循环遍历地图,但无法找到有关如何执行此操作的任何文档。这是我传入的结构:
type indexPageStruct struct {
BlogPosts []post
ArchiveList map[string]int
}
我可以使用以下方法循环使用BlogPosts:
{{range .BlogPosts}}
<article>
<h2><a href="/">{{.Title}}</a></h2>
...
但我似乎无法弄清楚如何做以下事情:
{{range .ArchiveList}}
<article>
<h2><a href="/">{{.Key}} {{.Value}}</a></h2>
....
答案 0 :(得分:1)
您可以在模板中“覆盖”地图,就像您可以在Go中对地图值进行“范围循环”一样。您还可以在迭代期间将映射键和值分配给临时变量。
引自text/template
的包文档:
如果“range”操作初始化变量,则将变量设置为迭代的连续元素。另外,“范围”可以声明两个变量,用逗号分隔:
range $index, $element := pipeline
在这种情况下,$ index和$ element分别设置为数组/切片索引或map键和元素的连续值。
text/template
中的所有内容也适用于html/template
。
请参阅此工作示例:
templ := `{{range $k, $v := .ArchiveList}}Key: {{$k}}, Value: {{$v}}
{{end}}`
t := template.Must(template.New("").Parse(templ))
p := indexPageStruct{
ArchiveList: map[string]int{"one": 1, "two": 2},
}
if err := t.Execute(os.Stdout, p); err != nil {
panic(err)
}
输出(在Go Playground上尝试):
Key: one, Value: 1
Key: two, Value: 2