32

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

range操作允许我遍历数组及其从零开始的索引,如下所示:

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

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

Number: {{$index + 1}}

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

我查看了 go-lang 官方文档,并没有发现任何关于模板内算术运算的特别之处。

我错过了什么?

4

3 回答 3

47

您必须编写一个自定义函数来执行此操作。

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)
    }
}
于 2014-09-05T17:16:10.457 回答
18

如果您碰巧正在编写用于 in 的 Go 模板consul-template,您可能会发现它们公开的算术函数很有用:

Number: {{add $index 1}}
于 2015-12-31T00:49:25.027 回答
2

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

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

它可以产生类似的东西

  1. 文字:某页
  2. 文本:一些不同的页面
于 2021-02-02T15:26:27.027 回答