簡體   English   中英

在golang模板中迭代地圖/字典

[英]iterate Map / Dictionary in golang template

我是Go的初學者,正在自學一些Web開發。 我正在嘗試在模板文件中遍歷地圖,並且找不到有關如何執行操作的任何文檔。 這是我傳入的結構:

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>
....

您可以在模板中的地圖上“范圍”,就像可以在Go中的地圖值上“范圍循環”一樣。 您還可以在迭代過程中將映射鍵和值分配給一個臨時變量。

text/template包doc引用:

如果“范圍”操作初始化變量,則將變量設置為迭代的連續元素。 此外,“范圍”可以聲明兩個變量,以逗號分隔:

 range $index, $element := pipeline 

在這種情況下,$ index和$ element分別設置為數組/切片索引或映射鍵和元素的連續值。

text/template所有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM