Go模板中的算术

时间:2014-09-05 15:59:46

标签: go go-templates

我试图在Go模板中实现一个非常简单的事情并且失败!

range动作允许我迭代一个数组及其从零开始的索引,如下所示:

{{range $index, $element := .Pages}}
  Number: {{$index}}, Text: {{element}}
{{end}}

但是,我正在尝试输出从1开始计数的索引。我的第一次尝试失败了:

Number: {{$index + 1}}

这会引发illegal number syntax: "+"错误。

我查看了go-lang官方文档,但没有找到任何与模板内部算术运算有关的内容。

我错过了什么?

3 个答案:

答案 0 :(得分:27)

您必须编写自定义函数才能执行此操作。

http://play.golang.org/p/WsSakENaC3

package main

import (
    "os"
    "text/template"
)

func main() {
    funcMap := template.FuncMap{
        // The name "inc" is what the function will be called in the template text.
        "inc": func(i int) int {
            return i + 1
        },
    }

    var strs []string
    strs = append(strs, "test1")
    strs = append(strs, "test2")

    tmpl, err := template.New("test").Funcs(funcMap).Parse(`{{range $index, $element := .}}
  Number: {{inc $index}}, Text:{{$element}}
{{end}}`)
    if err != nil {
        panic(err)
    }
    err = tmpl.Execute(os.Stdout, strs)
    if err != nil {
        panic(err)
    }
}

答案 1 :(得分:11)

如果您正在编写Go模板以供consul-template使用,您可能会发现他们的公开arithmetic functions有用:

Number: {{add $index 1}}

答案 2 :(得分:1)

还有一种方法可以制作 HTML 列表,但这并不适合所有情况。

<ol>
{{range $index, $element := .Pages}}
  <li>Text: {{$element}}</li>
{{end}}
</ol>

它可以产生类似的东西

  1. 文本:某些页面
  2. 文本:一些不同的页面