【问题标题】:variables in go templates [duplicate]go模板中的变量[重复]
【发布时间】:2017-12-17 03:38:17
【问题描述】:

执行以下模板代码时出现错误:

{{ $total := 0 }}
{{range $i, $a := .my.vars}}
     {{ $total = (addi $total $a)}}
{{end}}

这是错误:unexpected "=" in operand。总变量也应该在range 之外更改,所以我不能使用:=,因为它会在range 内创建一个新变量,而不是增加$total 变量。

addi 方法只是一个简单的添加,没有它也会发生错误。该错误似乎与 = 运算符有关。如果 go 模板不支持,有解决办法吗?

【问题讨论】:

    标签: go go-templates


    【解决方案1】:

    解决方法是定义一个变量类型和模板函数来创建它:

    type variable struct {
        Value interface{}
    }
    
    func (v *variable) Set(value interface{}) string {
        v.Value = value
        return ""
    }
    
    func newVariable(initialValue interface{}) *variable {
        return &variable{initialValue}
    }
    

    像这样将它添加为模板函数:

    t.Funcs(template.FuncMap{"var": newVariable, "addi": addi})
    

    像这样使用它:

    {{ $total := var 0 }}
    {{range $i, $a := .vars}}
         {{$total.Set (addi $total.Value $a)}}
    {{end}}
    {{$total.Value}}
    

    playground example

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 2017-11-27
      • 1970-01-01
      • 2014-10-14
      • 2016-12-02
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多