go模板中的变量[重复]

问题描述 投票:0回答:1

我在执行以下模板代码时遇到错误:

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

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

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

go go-templates
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.