go模板中的变量
variables in go templates
我在执行以下模板代码时遇到错误:
{{ $total := 0 }}
{{range $i, $a := .my.vars}}
{{ $total = (addi $total $a)}}
{{end}}
这是错误:unexpected "=" in operand
。 total 变量也应该在 range
之外更改,所以我不能使用 :=
,因为它会在 range
内创建一个新变量而不是增加 $total
变量。
addi
方法只是一个简单的加法,没有它也会报错。该错误似乎与 =
运算符有关。如果 go 模板不支持,是否有解决方法?
解决方法是定义一个变量类型和模板函数来创建它:
type variable struct {
Value interface{}
}
func (v *variable) Set(value interface{}) string {
v.Value = value
return ""
}
func newVariable(initialValue interface{}) *variable {
return &variable{initialValue}
}
像这样将其添加为模板函数:
t.Funcs(template.FuncMap{"var": newVariable, "addi": addi})
这样使用:
{{ $total := var 0 }}
{{range $i, $a := .vars}}
{{$total.Set (addi $total.Value $a)}}
{{end}}
{{$total.Value}}
我在执行以下模板代码时遇到错误:
{{ $total := 0 }}
{{range $i, $a := .my.vars}}
{{ $total = (addi $total $a)}}
{{end}}
这是错误:unexpected "=" in operand
。 total 变量也应该在 range
之外更改,所以我不能使用 :=
,因为它会在 range
内创建一个新变量而不是增加 $total
变量。
addi
方法只是一个简单的加法,没有它也会报错。该错误似乎与 =
运算符有关。如果 go 模板不支持,是否有解决方法?
解决方法是定义一个变量类型和模板函数来创建它:
type variable struct {
Value interface{}
}
func (v *variable) Set(value interface{}) string {
v.Value = value
return ""
}
func newVariable(initialValue interface{}) *variable {
return &variable{initialValue}
}
像这样将其添加为模板函数:
t.Funcs(template.FuncMap{"var": newVariable, "addi": addi})
这样使用:
{{ $total := var 0 }}
{{range $i, $a := .vars}}
{{$total.Set (addi $total.Value $a)}}
{{end}}
{{$total.Value}}