Go 使用范围在贴图上循环,仅迭代一次

Go 使用范围在贴图上循环,仅迭代一次,go,Go,我只需要在我的golang模板中迭代一次循环,目前它正在所有键上循环,但我希望它在一次迭代后停止 我该怎么做 {{range .Users}} <div> {{.Name}} </div> {{end}} {{range.Users} {{.Name} {{end} 用一个参数给出索引,而不是范围 {{index .Users 0}} <div> {{.Name}} </div> {{end}} {{index.Users 0} {{.

我只需要在我的golang模板中迭代一次循环,目前它正在所有键上循环,但我希望它在一次迭代后停止

我该怎么做

{{range .Users}}
<div>
  {{.Name}}
</div>
{{end}}
{{range.Users}
{{.Name}
{{end}

用一个参数给出
索引,而不是范围

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

两种解决方案;在循环时检查索引是否为0:

{{range $index, $element := . }}{{if eq $index 0 -}}
Item: {{$element}}
{{end}}{{end -}}
或者您可以定义一个“first”函数,它获取一个切片并将其截断为长度1

{{range first .}}
Item: {{.}}
{{end}}
下面是演示这两者的完整代码,您也可以

主程序包
进口(
“fmt”
“操作系统”
“文本/模板”
)
var t=template.Must(template.New(“x”).Parse(
“[{range$index,$element:=.}{{if eq$index 0-}}{{$element}}{{end}}{{end-}}}]”)
var funcs=map[string]接口{}{
“第一”:func(arg[]字符串)[]字符串{
如果len(arg)>0{
返回参数[:1]
}
归零
},
}
var t2=template.Must(template.New(“x”).Funcs(Funcs.Parse(
“[{{range first.}}{{{.}}{{{end-}}]”)
func main(){
tmpls:=[]*模板。模板{t,t2}
对于i,t:=范围tmpls{
fmt.Println(“模板”,i)
a:=[]字符串{“一”、“二”、“三”}
对于j:=0;j
所以即使集合为空,这也是安全的?这种语法在我看来很奇怪!
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()
    }
}