2016-09-19 2 views
1

Ich bin ein Anfänger bei Go und bin mir selbst einige Web dev unterrichten. Ich versuche, eine Map in einer Vorlagendatei zu durchlaufen und finde keine Dokumentation dazu. Hier ist mein struct i passieren in:iterieren Map/Dictionary in Golang Vorlage

type indexPageStruct struct { 
BlogPosts []post 
ArchiveList map[string]int 
} 

Ich kann Schleife über Blogeinträge ganz gut mit:

{{range .BlogPosts}} 
       <article> 
        <h2><a href="/">{{.Title}}</a></h2> 
... 

Aber ich kann nicht scheinen, um herauszufinden, wie man wie etwas zu tun:

{{range .ArchiveList}} 
       <article> 
        <h2><a href="/">{{.Key}} {{.Value}}</a></h2> 
.... 

Antwort

1

Sie können in Vorlagen über eine Karte "rangieren", so wie Sie über Kartenwerte in Go "range-loop" gehen können. Sie können den Map-Schlüssel und den Wert auch während der Iteration einer temporären Variablen zuweisen.

Zitiert aus dem Paket von text/template doc:

Wenn eine „Bereich“ Aktion eine Variable initialisiert wird, wird die Variable auf die aufeinanderfolgenden Elemente der Iteration gesetzt. Auch ist ein „Bereich“ zwei Variablen deklarieren kann, durch ein Komma getrennt:

range $index, $element := pipeline 

wobei in diesem Fall $ Index und $ Element sind mit den aufeinanderfolgenden Werten des Arrays/slice Index- oder Mapkey und Elemente eingestellt bzw. .

Alles in text/template gilt auch für html/template.

Sehen Sie dieses Arbeitsbeispiel:

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) 
} 

Output (versuchen Sie es auf dem Go Playground):

Key: one, Value: 1 
Key: two, Value: 2 
+0

Gosh, Dank !! Genau das, was ich brauchte. – stihl

Verwandte Themen