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 安装TIA PortalV15.1报错
  • ¥15 能把水桶搬到饮水机的机械设计
  • ¥15 Android Studio中如何把H5逻辑放在Assets 文件夹中以实现将h5代码打包为apk
  • ¥15 使用小程序wx.createWebAudioContext()开发节拍器
  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗
  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致
  • ¥15 在使用pyecharts时出现问题
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路