我正在尝试展示列表健身课程(瑜伽,普拉提等).对于每个类类型,有几个类,所以我想分组所有瑜伽课程,以及所有普拉提课程等等.
我做了这个函数来切片并制作它的地图
func groupClasses(classes []entities.Class) map[string][]entities.Class {
classMap := make(map[string][]entities.Class)
for _, class := range classes {
classMap[class.ClassType.Name] = append(classMap[class.ClassType.Name], class)
}
return classMap
}
Run Code Online (Sandbox Code Playgroud)
问题是现在如何迭代它,根据http://golang.org/pkg/text/template/,你需要以.Key格式访问它,我不知道密钥(除非我也传递了一个切片键入模板).如何在视图中解压缩此地图.
我目前所拥有的只是
{{ . }}
Run Code Online (Sandbox Code Playgroud)
它显示如下:
map[Pilates:[{102 PILATES ~/mobifit/video/ocen.mpg 169 40 2014-05-03 23:12:12 +0000 UTC 2014-05-03 23:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC {PILATES Pilates 1 2014-01-22 21:46:16 +0000 UTC} {1 leebrooks0@gmail.com password SUPERADMIN Lee Brooks {Male true} {1990-07-11 00:00:00 +0000 UTC true} {1.85 true} {88 true} 2014-01-22 21:46:16 +0000 UTC {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false}} [{1 Mat 2014-01-22 21:46:16 +0000 UTC}]} {70 PILATES ~/mobifit/video/ocen.mpg 119 66 2014-03-31 15:12:12 +0000 UTC 2014-03-31 15:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC
Run Code Online (Sandbox Code Playgroud)
Her*_*aaf 149
检查Go模板文档中的Variables部分.范围可以声明两个变量,用逗号分隔.以下应该有效:
{{ range $key, $value := . }}
<li><strong>{{ $key }}</strong>: {{ $value }}</li>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
ANi*_*sus 40
正如Herman指出的那样,您可以从每次迭代中获取索引和元素.
{{range $index, $element := .}}{{$index}}
{{range $element}}{{.Value}}
{{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud)
工作范例:
package main
import (
"html/template"
"os"
)
type EntetiesClass struct {
Name string
Value int32
}
// In the template, we use rangeStruct to turn our struct values
// into a slice we can iterate over
var htmlTemplate = `{{range $index, $element := .}}{{$index}}
{{range $element}}{{.Value}}
{{end}}
{{end}}`
func main() {
data := map[string][]EntetiesClass{
"Yoga": {{"Yoga", 15}, {"Yoga", 51}},
"Pilates": {{"Pilates", 3}, {"Pilates", 6}, {"Pilates", 9}},
}
t := template.New("t")
t, err := t.Parse(htmlTemplate)
if err != nil {
panic(err)
}
err = t.Execute(os.Stdout, data)
if err != nil {
panic(err)
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Pilates
3
6
9
Yoga
15
51
Run Code Online (Sandbox Code Playgroud)
游乐场:http://play.golang.org/p/4ISxcFKG7v
| 归档时间: |
|
| 查看次数: |
81550 次 |
| 最近记录: |