Golang 模板 - 更新和打印计数器变量
Golang Templates - Update and Print Counter Variable
我正在尝试在遍历嵌套 for 循环时更新和打印 Go 模板内的计数器变量。
我不是试图在循环时打印我的任一数据结构的索引。我不打算打印每个数据结构中的每个对象,我希望这个计数器变量仅在相等语句为真时递增。
我做错了什么?
去游乐场link:https://play.golang.org/p/RsuEk1PqZ7a
type a struct {
Numbers []string
Letters []string
}
var data = &a{
Numbers: []string{"one", "two"},
Letters: []string{"a","b","b", "c"},
}
var tmplSrc = `start
{{with $i := 0}}
{{range $number := .Numbers}}
{{range $letter := .Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
{{end}}
fin
`
func main() {
funcMap := template.FuncMap{
"add": func(a int, b int) int {
return a + b
},
}
tmpl := template.Must(template.New("test").Funcs(funcMap).Parse(tmplSrc))
tmpl.Execute(os.Stdout, data)
}
tmpl.Execute 执行返回的错误提示问题:
test:3:21: executing "test" at <.Numbers>: can't evaluate field Numbers in type int
始终处理错误!
问题是 {{with $i := 0}}
将 .
设置为 0
。该模板期望 .
成为模板的数据参数。通过使用 $
来引用数据参数来修复。 .Letters
需要进行类似的更改,因为 {{range}}
还设置了 .
.
{{with $i := 1}}
{{range $number := $.Numbers}}
{{range $letter := $.Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
{{end}}
我用{{with $i := 1}}
来匹配操场上的代码。该题使用{{with $i := 0}}
。问题中的代码引入了另一个问题: {{with}}
的内容被跳过,因为条件的计算结果为 false(0 在模板条件中为 false)。通过删除 {{with}}
指令进行修复。不需要。
{{$i := 0}}
{{range $number := $.Numbers}}
{{range $letter := $.Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
我正在尝试在遍历嵌套 for 循环时更新和打印 Go 模板内的计数器变量。
我不是试图在循环时打印我的任一数据结构的索引。我不打算打印每个数据结构中的每个对象,我希望这个计数器变量仅在相等语句为真时递增。
我做错了什么?
去游乐场link:https://play.golang.org/p/RsuEk1PqZ7a
type a struct {
Numbers []string
Letters []string
}
var data = &a{
Numbers: []string{"one", "two"},
Letters: []string{"a","b","b", "c"},
}
var tmplSrc = `start
{{with $i := 0}}
{{range $number := .Numbers}}
{{range $letter := .Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
{{end}}
fin
`
func main() {
funcMap := template.FuncMap{
"add": func(a int, b int) int {
return a + b
},
}
tmpl := template.Must(template.New("test").Funcs(funcMap).Parse(tmplSrc))
tmpl.Execute(os.Stdout, data)
}
tmpl.Execute 执行返回的错误提示问题:
test:3:21: executing "test" at <.Numbers>: can't evaluate field Numbers in type int
始终处理错误!
问题是 {{with $i := 0}}
将 .
设置为 0
。该模板期望 .
成为模板的数据参数。通过使用 $
来引用数据参数来修复。 .Letters
需要进行类似的更改,因为 {{range}}
还设置了 .
.
{{with $i := 1}}
{{range $number := $.Numbers}}
{{range $letter := $.Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
{{end}}
我用{{with $i := 1}}
来匹配操场上的代码。该题使用{{with $i := 0}}
。问题中的代码引入了另一个问题: {{with}}
的内容被跳过,因为条件的计算结果为 false(0 在模板条件中为 false)。通过删除 {{with}}
指令进行修复。不需要。
{{$i := 0}}
{{range $number := $.Numbers}}
{{range $letter := $.Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}