당신은 단순히 문제의 배열을 포함하는지도 [문자열] 인터페이스를 {}해야 한 다음 사용하는 템플릿 실행 데이터로.
그런 다음 문제를 반복하고 템플릿에서 해당 멤버에 직접 액세스 할 수 있습니다. 당신이 원하는 또한 경우
issue: 1
author: Pepe
issue: 2
author: Cholo
을/당신이 "부자"문제를 정의해야 템플릿 렌더링 프로세스에 특정 데이터를 추가해야합니다
const t = `
{{ range .issues }}
issue: {{ .ID }}
author: {{ .Author }}
{{ end }}
`
type Issue struct {
ID int
Author string
}
func main() {
issues := []Issue{{1, "Pepe"}, {2, "Cholo"}}
data := map[string]interface{}{"issues": issues}
tpl := template.Must(template.New("bla").Parse(t))
tpl.Execute(os.Stdout, data)
}
출력 : 여기에
작은 완벽한 예제 이 목적을 위해 구조체를 만들고 템플릿을 템플릿 실행에 전달하기 전에 모델을 변환하십시오. 이는 정적으로 알려진 추가 데이터 (RichIssue의 단순 멤버)와 동적으로로드 된 데이터 (맵의 키/값) 모두에 대해 수행 할 수 있습니다. . 다음과 같은 출력을 생성
const t = `
{{ range .issues }}
issue: {{ .ID }}
author: {{ .Author }}
static1: {{ .Static1 }}
dyn1: {{ .Data.dyn1 }}
{{ end }}
`
type Issue struct {
ID int
Author string
}
type RichIssue struct {
Issue
Static1 string // some statically known additional data for rendering
Data map[string]interface{} // container for dynamic data (if needed)
}
func GetIssueStatic1(i Issue) string {
return strconv.Itoa(i.ID) + i.Author // whatever
}
func GetIssueDyn1(i Issue) string {
return strconv.Itoa(len(i.Author)) // whatever
}
func EnrichIssue(issue Issue) RichIssue {
return RichIssue{
Issue: issue,
Static1: GetIssueStatic1(issue),
// in this contrived example I build "dynamic" members from static
// hardcoded strings but these fields (names and data) should come from
// some kind of configuration or query result to be actually dynamic
// (and justify being set in a map instead of being simple static
// members as Static1)
Data: map[string]interface{}{
"dyn1": GetIssueDyn1(issue),
"dyn2": 2,
"dyn3": "blabla",
},
}
}
func EnrichIssues(issues []Issue) []RichIssue {
r := make([]RichIssue, len(issues))
for i, issue := range issues {
r[i] = EnrichIssue(issue)
}
return r
}
func main() {
issues := []Issue{{1, "Pepe"}, {2, "Cholo"}}
data := map[string]interface{}{"issues": EnrichIssues(issues)}
tpl := template.Must(template.New("bla").Parse(t))
tpl.Execute(os.Stdout, data)
}
:
issue: 1
author: Pepe
static1: 1Pepe
dyn1: 4
issue: 2
author: Cholo
static1: 2Cholo
dyn1: 5
당신은 $ $의 ID처럼 사용할 수는, 그것이 예상대로 평가 wount
다음은 위의 제안을 보여주는 확장 된 예제 . 다르게 배열해야 할 수도 있습니다. –
글로벌지도를 사용하고 키로 ID를 사용하십시오. –
@Acidic, 템플릿 실행 방법 (...)을 나타내는 코드 줄을 추가하십시오. –