2014-09-05 22 views
10

Ich versuche, eine sehr einfache Sache in einer Go-Vorlage zu erreichen und scheitern!Arithmetik in Go-Vorlagen

Die range Aktion ermöglicht es mir, durch ein Array zu durchlaufen zusammen mit seiner nullbasierten Index, wie so:

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

Allerdings bin ich ausgeben Indizes versuchen, die von 1. Mein erster Versuch zu zählen konnte nicht gestartet werden :

Number: {{$index + 1}} 

Dies wirft einen illegal number syntax: "+" Fehler.

Ich schaute in die go-lang offizielle Dokumentation und fand nichts besonderes bezüglich der arithmetischen Operation innerhalb der Vorlage.

Was fehlt mir?

Antwort

13

Sie müssen eine benutzerdefinierte Funktion schreiben, um dies zu tun.

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

Hallo, vielen Dank für Ihre Antwort. Das ist genau das, was ich brauchte :) – Ripul