go模板中的变量

go模板中的变量,go,go-templates,Go,Go Templates,执行以下模板代码时出错: {{ $total := 0 }} {{range $i, $a := .my.vars}} {{ $total = (addi $total $a)}} {{end}} 下面是错误:操作数中意外的“=”。total变量也应该在范围之外更改,因此我不能使用:=,因为它将在范围内创建一个新变量,而不是增加$total变量 addi方法只是一个简单的加法,没有它也会发生错误。该错误似乎与=运算符有关。如果go模板不支持它,是否有解决方法?解决方法是定义变量类型和

执行以下模板代码时出错:

{{ $total := 0 }}
{{range $i, $a := .my.vars}}
     {{ $total = (addi $total $a)}}
{{end}}
下面是错误:
操作数中意外的“=”
。total变量也应该在
范围之外更改,因此我不能使用
:=
,因为它将在
范围内创建一个新变量,而不是增加
$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}}
像这样使用它:

t.Funcs(template.FuncMap{"var": newVariable, "addi": addi})
{{ $total := var 0 }}
{{range $i, $a := .vars}}
     {{$total.Set (addi $total.Value $a)}}
{{end}}
{{$total.Value}}