2012-05-25 9 views
6

Sto provando a scrivere una stringa simile a questo usando il sistema di modelli di go: (p1, p2, p3), dove p1, p2, .. viene da un array nel programma. Il mio problema è come posizionare correttamente la virgola per l'ultimo (o il primo) elemento.Trattamento caso speciale per l'ultimo elemento di un intervallo nei modelli di testo di Google Go

La mia versione non funzionante che emette (P1, P2, P3,) si presenta così:

package main 

import "text/template" 
import "os" 
func main() { 
    ip := []string{"p1", "p2", "p3"} 
    temp := template.New("myTemplate") 
    temp,_ = temp.Parse(paramList) 
    temp.Execute(os.Stdout, ip) 

} 

const paramList = 
`{{ $i := . }}({{ range $i }}{{ . }}, {{end}})` 

mio miglior indizio finora è trovato qui http://golang.org/pkg/text/template/ nella seguente dichiarazione:

Se un L'azione "range" inizializza una variabile, la variabile è impostata sugli elementi successivi dell'iterazione. Inoltre, un "range" può dichiarare due variabili, separati da una virgola:

$index, $element := pipeline 

in quale indice caso $ e $ elemento sono impostati ai valori successivi della matrice/indice slice o mappa chiave e dell'elemento , rispettivamente. Si noti che se c'è una sola variabile, viene assegnato l'elemento; questo è opposto alla convenzione nelle clausole della gamma Go. dove è suggerito che l'indice

Questo suggerisce che è possibile entrare in possesso dell'indice nell'iterazione ma proprio non riesco a capire che cosa si intende con la gamma di dichiarare due variabili e dove nel modello le variabili dovrebbero essere dichiarati

risposta

8

Vedere this example dalla mailing list go-nuts. Una chiave per questo trucco è che un modello if è diverso da una lingua Go if. Un modello può verificare un valore pari a zero, a differenza della lingua Go che richiede un valore booleano. La magia è quindi {{if $index}},{{end}} dove $ index non ha bisogno di dichiarazioni diverse dalla sua apparizione nel compito.

+0

Grazie. Questo l'ha risolto! – Laserallan

Problemi correlati