переменные в шаблонах go [дубликаты]

Я получаю сообщение об ошибке при выполнении следующего кода шаблона:

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

Вот ошибка: unexpected "=" in operand. Общая переменная также должна измениться за пределами range, поэтому я не могу использовать :=, потому что это создаст новую переменную внутри range вместо увеличения переменной $total.

Метод addi — простое дополнение, без него ошибка тоже возникает. Похоже, ошибка связана с оператором =. Если шаблоны go не поддерживают это, есть ли обходной путь?


person Florian    schedule 17.12.2017    source источник


Ответы (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}}

пример игровой площадки

person Cerise Limón    schedule 17.12.2017