web-dev-qa-db-ja.com

Goテンプレートの算術

Goテンプレートで非常に簡単なことを達成しようとして失敗しました!

rangeアクションを使用すると、次のようにゼロベースのインデックスと共に配列を反復処理できます。

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

ただし、1からカウントを開始するインデックスを出力しようとしています。最初の試行は失敗しました。

Number: {{$index + 1}}

これはillegal number syntax: "+"エラーをスローします。

Go-langの公式ドキュメントを調べたところ、テンプレート内の算術演算に関して特に何も見つかりませんでした。

何が欠けていますか?

22
Ripul

これを行うには、カスタム関数を作成する必要があります。

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

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)
    }
}
31
chendesheng

たまたま consul-template 、それらの公開された 算術関数 が役立つかもしれません:

Number: {{add $index 1}}
14
phs