2012-05-25 9 views
6

Estoy tratando de escribir una cadena como esta usando el sistema de plantillas de go: (p1, p2, p3), donde p1, p2, .. proviene de una matriz en el programa. Mi problema es cómo colocar la coma correctamente para el último elemento (o el primero).Tratamiento de casos especiales para el último elemento de un rango en las plantillas de texto de Google Go

Mi versión no de trabajo que da salida (P1, P2, P3,) tiene el siguiente aspecto:

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}})` 

Mi mejor pista hasta el momento se encuentran aquí http://golang.org/pkg/text/template/ en la siguiente afirmación:

Si una La acción "rango" inicializa una variable, la variable se establece en los elementos sucesivos de la iteración. Además, un "intervalo" puede declarar dos variables, separados por una coma:

$index, $element := pipeline 

en el que caso índice de $ y $ elemento se establecen en los valores sucesivos de la índice de matriz/rebanada o mapa de claves y el elemento , respectivamente. Tenga en cuenta que si solo hay una variable, se le asigna el elemento; esto es opuesto a la convención en las cláusulas Go range. donde se sugiere que el índice

Esto sugiere que es posible de hacerse con el índice en la iteración, pero simplemente no puede averiguar lo que se quiere decir con la gama de declarar dos variables y donde en la plantilla de esas variables se supone que deben ser declarados.

Respuesta

8

Ver this example de la lista de correo de go-nuts. Una de las claves de este truco es que una plantilla if es diferente de un idioma Go if. Una plantilla puede probar con un valor de cero, a diferencia del lenguaje Go que requiere un booleano. La magia es entonces {{if $index}},{{end}} donde $ index no necesita otra declaración que no sea su apariencia en la asignación.

+0

Gracias. ¡Eso lo resolvió! – Laserallan

Cuestiones relacionadas