doutang6600 2017-12-17 03:38
浏览 35
已采纳

go模板中的变量[重复]

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>
  • 写回答

1条回答 默认 最新

  • douren2831 2017-12-17 04:22
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?