Определите анонимную структуру с полями для подсчета людей и консультаций и передайте структуру в метод Execute шаблона:
var data = struct {
PeopleCounts []PeopleCount
Consultations []Consultation
}{
PeopleCounts: p,
Consultations: c,
}
err := t.Execute(w, &data)
if err != nil {
// handle error
}
Используйте эти поля в шаблоне:
{{range .PeopleCounts}}{{.Name}}
{{end}}
{{range .Consultations}}{{.Name}}
{{end}}
Пример игровой площадки
Вы можете объявить именованный тип для данных шаблона. Преимущество объявления анонимного типа заключается в том, что знание данных шаблона локализовано в функции, которая вызывает шаблон.
Вы также можете использовать карту вместо типа:
err := t.Execute(w, map[string]interface{}{"PeopleCounts": p, "Consultations": c})
if err != nil {
// handle error
}
Недостаток использования карты в том, что опечатка в шаблоне может не привести к ошибке. Например, ``{{range .PopleConts}}{{end}}` молчание ничего не делает.
В приведенном выше коде предполагается, что PeopleCount и Consultation являются типами структур, а не срезами анонимных типов структур:
type PeopleCount struct {
Name string
Count int
}
type Consultation struct {
Name string
Opd_count int
Opinion_count int
Req_count int
}
Обычно удобнее присвоить элементу именованный тип, чем присвоить именованный тип срезу.
person
Cerise Limón
schedule
11.09.2015