2016-09-19 3 views
1

저는 Go에서 초급자이며 웹 개발자를 가르치고 있습니다. 템플릿 파일에서 맵을 반복하려고하고 어떻게 할 지에 대한 문서를 찾을 수 없습니다.iterate지도/golang 사전 템플릿

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

내가 잘 블로그 게시물을 통해 루프를 사용 할 수 있습니다 :

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

을하지만 난 같은 것을 수행하는 방법을 알아낼 캔트 :

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

답변

1
을 여기 내 구조체는 내가 전달하다

Go에서 맵 값을 "범위 루프"할 수있는 것처럼 템플릿의 맵을 "범위 지정"할 수 있습니다. 반복 도중 임시 변수에 맵 키와 값을 지정할 수도 있습니다.

text/template의 패키지 문서에서 인용 :

은 "범위"동작 변수를 초기화하는 경우, 상기 변수는 반복의 연속 엘리먼트에 설정된다. 또한, "범위"는 콤마로 분리 된 두 개의 변수 선언 할 수있다 : 케이스 $ 지수 $ 소자 어레이/슬라이스 인덱스의 연속적인 값으로 설정

range $index, $element := pipeline 

되는 또는 각각 키 요소 매핑 .

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 
+0

세상에, 감사합니다! 내가 필요한 것. – stihl