golang 템플릿에서 루프를 한 번 반복해야합니다. 현재 모든 키를 반복하지만 한 번의 반복 후에 중지하고 싶습니다.범위를 사용하여지도를 반복하면서 한 번만 반복하십시오.
어떻게하면됩니까? 대신 범위의
{{range .Users}}
<div>
{{.Name}}
</div>
{{end}}
golang 템플릿에서 루프를 한 번 반복해야합니다. 현재 모든 키를 반복하지만 한 번의 반복 후에 중지하고 싶습니다.범위를 사용하여지도를 반복하면서 한 번만 반복하십시오.
어떻게하면됩니까? 대신 범위의
{{range .Users}}
<div>
{{.Name}}
</div>
{{end}}
, 인수
{{index .Users 0}}
<div>
{{.Name}}
</div>
{{end}}
두 솔루션 index
을 제공; 중 하나를 반복 할 때 인덱스가 0인지 확인 :
{{range $index, $element := . }}{{if eq $index 0 -}}
Item: {{$element}}
{{end}}{{end -}}
을 아니면 조각을 취하고 길이 여기에 1
{{range first .}}
Item: {{.}}
{{end}}
로 자르는 "최초의"함수를 정의 할 수있는 것은 모두 보여 전체 코드입니다 , 당신은 또한 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()
}
}
그래서이 컬렉션이 비어있는 경우에도 안전 할 수있는? 그 구문은 이상하게 보입니다! – Blankman