我有以下情况,我将包含映射的结构传递给模板:package mainimport ( "log" "os" "text/template")var fns = template.FuncMap{ "plus1": func(x int) int { return x + 1 },}type codec struct { Names map[string]string Count int}func main() { a := map[string]string{"one": "1", "two": "2", "three": "3"} t := template.Must(template.New("abc").Funcs(fns).Parse(`{{$l := len .Names}}{{range $k, $v := .Names}}{{if ne (plus1 $.Count) $l}}{{$k}} {{$v}} {{end}}{{end}}.`)) err := t.Execute(os.Stdout, codec{a, 0}) if err != nil { log.Println(err) }}我想增加 的Count字段,codec以便我可以知道我看到了多少地图项目。
1 回答
动漫人物
TA贡献1815条经验 获得超10个赞
一种解决方案是使plus1函数成为一个直接作用于 值的闭包codec:
// first create a codec instance
c := codec {a, 0}
// now define the function as a closure with a reference to c
fns := template.FuncMap{
"plus1": func() int {
c.Count++
return c.Count
},
}
// now we don't need to pass anything to it in the template
t := template.Must(template.New("abc").Funcs(fns).Parse(`{{$l := len .Names}}{{range $k, $v := .Names}}{{if ne (plus1) $l}}{{$k}} {{$v}} {{end}}{{end}}.`))
输出是:
one 1 three 3
我猜这就是你的目标?并且该值在c执行结束时保留。
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消