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

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

报告相同问题?

悬赏问题

  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)