2016-06-12 8 views

Antwort

0

statt Bereich, geben index mit einem Argument

{{index .Users 0}} 
<div> 
    {{.Name}} 
</div> 
{{end}} 
+0

So ist das sicher, auch wenn die Sammlung leer ist? diese Syntax sieht für mich seltsam aus! – Blankman

2

Zwei Lösungen; entweder überprüfen, ob Ihr Index 0 ist, wenn Looping:

{{range $index, $element := . }}{{if eq $index 0 -}} 
Item: {{$element}} 
{{end}}{{end -}} 

Oder Sie könnten eine „erste“ Funktion definieren, die eine Scheibe nimmt und kürzt sie auf Länge 1.

{{range first .}} 
Item: {{.}} 
{{end}} 

Hier komplette Code, der beide demonstriert Sie können auch try on the playground.

package main 

import (
    "fmt" 
    "os" 
    "text/template" 
) 

var t = template.Must(template.New("x").Parse(
    "[{{range $index, $element := . }}{{if eq $index 0 -}}{{$element}}{{end}}{{end -}}]")) 

var funcs = map[string]interface{}{ 
    "first": func(arg []string) []string { 
     if len(arg) > 0 { 
      return arg[:1] 
     } 
     return nil 
    }, 
} 

var t2 = template.Must(template.New("x").Funcs(funcs).Parse(
    "[{{range first . }}{{.}}{{end -}}]")) 

func main() { 
    tmpls := []*template.Template{t, t2} 
    for i, t := range tmpls { 
     fmt.Println("TEMPLATE", i) 
     a := []string{"one", "two", "three"} 
     for j := 0; j < len(a); j++ { 
      fmt.Println("with input slice of length", j) 
      t.Execute(os.Stdout, a[:j]) 
      fmt.Println() 
     } 
     fmt.Println() 
    } 
} 
Verwandte Themen