我试图在Go模板中实现一个非常简单的事情并且失败!
range
动作允许我迭代一个数组及其从零开始的索引,如下所示:
{{range $index, $element := .Pages}}
Number: {{$index}}, Text: {{element}}
{{end}}
但是,我正在尝试输出从1开始计数的索引。我的第一次尝试失败了:
Number: {{$index + 1}}
这会引发illegal number syntax: "+"
错误。
我查看了go-lang官方文档,但没有找到任何与模板内部算术运算有关的内容。
我错过了什么?
答案 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>
它可以产生类似的东西