2014-09-05 11 views
10

Sto cercando di ottenere una cosa molto semplice in un modello Go e in mancanza!Modelli aritmetici in Go

L'azione range mi permette di iterare un array con il relativo indice a base zero, come in:

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

Tuttavia, sto cercando di indici di uscita che iniziano a contare da 1. Il mio primo tentativo fallito :

Number: {{$index + 1}} 

Questo genera un errore illegal number syntax: "+".

Ho esaminato la documentazione ufficiale di go-lang e non ho trovato nulla di particolare riguardo all'operazione aritmetica all'interno del modello.

Cosa mi manca?

risposta

13

Per eseguire questa operazione è necessario scrivere una funzione personalizzata.

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

Ciao, molte grazie per la risposta. Questo è esattamente ciò di cui avevo bisogno :) – Ripul