Templates 访问排序对列表的第一项

Templates 访问排序对列表的第一项,templates,go,indexing,range,go-templates,Templates,Go,Indexing,Range,Go Templates,我是新手,我正在尝试访问SortedPair列表中的第一个元素。我尝试了{index.Labels.SortedPairs 1}{{{.Name}}={{.Value}},但这不起作用,我得到的是无法计算template.Alert类型中的字段名 有没有办法得到第一个元素?当它是{{range}}时,它工作正常,但显示的元素太多 谢谢注意第一个索引是0而不是1 在显示列表的名称和值时,您可以为列表编制索引: 但是,如果将其分配给变量,则会缩短: {{$first := index .Labels

我是新手,我正在尝试访问SortedPair列表中的第一个元素。我尝试了{index.Labels.SortedPairs 1}{{{.Name}}={{.Value}},但这不起作用,我得到的是无法计算template.Alert类型中的字段名

有没有办法得到第一个元素?当它是{{range}}时,它工作正常,但显示的元素太多


谢谢

注意第一个索引是0而不是1

在显示列表的名称和值时,您可以为列表编制索引:

但是,如果将其分配给变量,则会缩短:

{{$first := index .Labels.SortedPairs 0}}{{$first.Name}} = {{$first.Value}}
如果使用{{with}}操作,则更清楚:

让我们测试3种变体:

type Pair struct {
    Name, Value string
}

var variants = []string{
    `{{$first := index .SortedPairs 0}}{{$first.Name}} = {{$first.Value}}`,
    `{{(index .SortedPairs 0).Name}} = {{(index .SortedPairs 0).Value}}`,
    `{{with index .SortedPairs 0}}{{.Name}} = {{.Value}}{{end}}`,
}

m := map[string]interface{}{
    "SortedPairs": []Pair{
        {"first", "1"},
        {"second", "2"},
    },
}

for _, templ := range variants {
    t := template.Must(template.New("").Parse(templ))
    if err := t.Execute(os.Stdout, m); err != nil {
        panic(err)
    }
    fmt.Println()
}
请在以下服务器上尝试输出:


您可以创建一个返回第一对的函数或方法,并从模板中调用它。如果您编写了简单的函数,从而可以编写更简单的模板,则可以看到更清晰的内容;太好了,谢谢!对不起,我还不能投票,没有足够的代表
{{with index .Labels.SortedPairs 0}}{{.Name}} = {{.Value}}{{end}}
type Pair struct {
    Name, Value string
}

var variants = []string{
    `{{$first := index .SortedPairs 0}}{{$first.Name}} = {{$first.Value}}`,
    `{{(index .SortedPairs 0).Name}} = {{(index .SortedPairs 0).Value}}`,
    `{{with index .SortedPairs 0}}{{.Name}} = {{.Value}}{{end}}`,
}

m := map[string]interface{}{
    "SortedPairs": []Pair{
        {"first", "1"},
        {"second", "2"},
    },
}

for _, templ := range variants {
    t := template.Must(template.New("").Parse(templ))
    if err := t.Execute(os.Stdout, m); err != nil {
        panic(err)
    }
    fmt.Println()
}
first = 1
first = 1
first = 1