2014-09-05 12 views
10

Próbuję osiągnąć bardzo prostą rzecz w szablonie Go i nie udało się!Arytmetyka w szablonach Go

Akcja range pozwala mi iterację tablicy wraz z jego indeksu od zera, a więc:

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

Jednak staram się wskaźników wyjściowych, które zaczynają licząc od 1. Moja pierwsza próba nie powiodła się :

Number: {{$index + 1}} 

Powoduje to błąd illegal number syntax: "+".

Zajrzałem do oficjalnej dokumentacji i nie znalazłem nic szczególnego w odniesieniu do operacji arytmetycznych wewnątrz szablonu.

Czego mi brakuje?

Odpowiedz

13

Musisz napisać niestandardową funkcję, aby to zrobić.

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

Witam, dzięki za odpowiedź. Właśnie tego potrzebowałem :) – Ripul