2 回答

TA貢獻1884條經(jīng)驗 獲得超4個贊
定義一個包含人數(shù)統(tǒng)計和咨詢字段的匿名結(jié)構(gòu),并將該結(jié)構(gòu)傳遞給模板 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}}
游樂場示例
您可以為模板數(shù)據(jù)聲明一個命名類型。匿名類型聲明的優(yōu)點是模板數(shù)據(jù)的知識本地化到調(diào)用模板的函數(shù)。
您還可以使用地圖而不是類型:
err := t.Execute(w, map[string]interface{}{"PeopleCounts": p, "Consultations": c})
if err != nil {
// handle error
}
使用地圖的缺點是模板中的拼寫錯誤可能不會導(dǎo)致錯誤。例如,``{{range .PopleConts}}{{end}}` silent 什么都不做。
上面的代碼假設(shè) PeopleCount 和 Consultation 是結(jié)構(gòu)類型而不是匿名結(jié)構(gòu)類型的切片:
type PeopleCount struct {
Name string
Count int
}
type Consultation struct {
Name string
Opd_count int
Opinion_count int
Req_count int
}
給元素一個命名類型通常比給切片一個命名類型更方便。

TA貢獻1775條經(jīng)驗 獲得超11個贊
如果您愿意,可以定義一個未導(dǎo)出的結(jié)構(gòu)體,其中包含人數(shù)統(tǒng)計和咨詢字段,并將該結(jié)構(gòu)體傳遞給模板 Execute 方法:
type viewModel struct {
PeopleCounts []PeopleCount
Consultations []Consultation
}
// ...
var data = viewModel{
PeopleCounts: p,
Consultations: c,
}
err := t.Execute(w, &data)
if err != nil {
// handle error
}
這種方法與@Bravada 的回答大致相似。是否顯式或匿名使用視圖模型類型只是個人喜好的問題。
- 2 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報