访问排序对列表的第一项

iso123:

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

有没有办法获得第一个要素?如果是{{range}},它可以正常工作,但显示太多元素。

谢谢

icza:

请注意,第一个索引是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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章