访问排序对列表的第一项
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
。
您可以在显示 Name
和 Value
时索引列表:
{{(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
我是 Go Templates 的新手,我正在尝试访问 SortedPair
列表中的第一个元素。我试过 {{ (index .Labels.SortedPairs 1)}}{{ .Name }} = {{ .Value }}
但这不起作用,我得到 can't evaluate field Name in type template.Alert
.
有没有办法得到第一个元素?当它是 {{range}}
时,它工作正常但显示的元素太多。
谢谢
请注意,第一个索引是 0
而不是 1
。
您可以在显示 Name
和 Value
时索引列表:
{{(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