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

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

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里