This question already has an answer here:
I'm getting an error when executing the following template code:
{{ $total := 0 }}
{{range $i, $a := .my.vars}}
{{ $total = (addi $total $a)}}
{{end}}
Here's the error: unexpected "=" in operand
. The total variable should also change outside of the range
, so I can't use :=
, because it would create a new variable inside the range
instead of increasing the $total
variable.
The addi
method is just a simple addition, the error does also occurr without it. It seems like the error is related to the =
operator. If go templates don't support it, is there a workaround?
</div>
The workaround is to define a variable type and template function to create it:
type variable struct {
Value interface{}
}
func (v *variable) Set(value interface{}) string {
v.Value = value
return ""
}
func newVariable(initialValue interface{}) *variable {
return &variable{initialValue}
}
Add it as a template function like this:
t.Funcs(template.FuncMap{"var": newVariable, "addi": addi})
Use it like this:
{{ $total := var 0 }}
{{range $i, $a := .vars}}
{{$total.Set (addi $total.Value $a)}}
{{end}}
{{$total.Value}}