2014-11-29 6 views
5

Ich bin auf der Suche nach einem Array mit Go-Vorlagen Schleife und ich möchte eine zusätzliche Zeichenfolge zum letzten Element in der Schleife hinzufügen.Go Alternative für Python loop.last

In Python, kann ich

{% for host in hosts %} 
{{ host }}{% if loop.last %} ;{% endif %} 
{% endfor %} 

Suche mit Go Gleiche zu erreichen, ist unten das Snippet des äquivalenten Go.

{{ range $host := $hosts }} 
{{$host}} 
{{ end }} 

Danke.

Antwort

2

Wenn die Liste nicht leer ist, gibt das Python-Snippet ein Semikolon nach dem letzten Element aus. Sie können das gleiche Ergebnis in Go erzielen, indem Sie den Bereich mit einem if-Element umgeben, um zu prüfen, ob mindestens ein Element in der Scheibe vorhanden ist, und zu drucken; außerhalb der Schleife.

{{if $hosts}}{{range $host := $hosts}} 
{{$host}} 
{{ end }} ;{{end}} 

Dieses Snippet funktioniert, weil Sie an das Ende des letzten Elements hinzufügen. Eine allgemeinere Lösung erfordert eine benutzerdefinierte Vorlagenfunktion. Hier ist ein Beispiel Funktion:

func last(v interface{}, i int) (bool, error) { 
    rv := reflect.ValueOf(v) 
    if rv.Kind() != reflect.Slice { 
    return false, errors.New("not a slice") 
    } 
    return rv.Len()-1 == i, nil 
} 

und hier ist, wie es in der Vorlage zu verwenden:

{{range $i, $host := $hosts }} 
{{$host}}{{if last $hosts $i}} ;{{end}} 
{{ end }} 

ich ein a working example of the custom function auf den Spielplatz geschrieben.

-1

pongo2 zielt darauf ab, die Django-Vorlage-Syntax (die Jinja2 ähnlich ist) zu unterstützen. Ihr Vorlagencode funktioniert in pongo2 mit einer kleinen Änderung; siehe this example auf dem Spielplatz.