访问排序对列表的第一项

Access first item of sorted pair list

我是 Go Templates 的新手,我正在尝试访问 SortedPair 列表中的第一个元素。我试过 {{ (index .Labels.SortedPairs 1)}}{{ .Name }} = {{ .Value }} 但这不起作用,我得到 can't evaluate field Name in type template.Alert.

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

谢谢

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

您可以在显示 NameValue 时索引列表:

{{(index .Labels.SortedPairs 0).Name}} = {{(index .Labels.SortedPairs 0).Value}}

不过,如果将它分配给变量,它会更短:

{{$first := index .Labels.SortedPairs 0}}{{$first.Name}} = {{$first.Value}}

如果您使用 {{with}} 操作会更清楚:

{{with index .Labels.SortedPairs 0}}{{.Name}} = {{.Value}}{{end}}

让我们测试 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()
}

输出(在 Go Playground 上尝试):

first = 1
first = 1
first = 1