0

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?

Florian
  • 177
  • 1
  • 11

1 Answers1

1

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}}

playground example

Charlie Tumahai
  • 113,709
  • 12
  • 249
  • 242