如何在Go模板中访问数组的第一个索引的值

时间:2018-10-06 19:27:41

标签: go struct slice go-templates

因此,当我使用html模板时,我得到了对象:

<div>Foobar {{ index .Doc.Users 0}}</div>

输出:

<div>Foobar {MyName my@email.com}</div>

我只想使用Name字段,但我尝试了许多次迭代但均未成功:

{{ index .Doc.Users.Name 0}}
{{ index .Doc.Users 0 .Name}}
{{ .Name index .Quote.Clients 0}}
...

仅获取数组中第一个元素的.Name字段(.Doc.Users[0].Name)的正确语法是什么?

1 个答案:

答案 0 :(得分:3)

只需将表达式分组并应用.Name选择器:

<div>Foobar {{ (index .Doc.Users 0).Name }}</div>

这是一个可运行,可验证的示例:

type User struct {
    Name  string
    Email string
}

t := template.Must(template.New("").Parse(
    `<div>Foobar {{ (index .Doc.Users 0).Name }}</div>`))

m := map[string]interface{}{
    "Doc": map[string]interface{}{
        "Users": []User{
            {Name: "Bob", Email: "bob@myco.com"},
            {Name: "Alice", Email: "alice@myco.com"},
        },
    },
}

fmt.Println(t.Execute(os.Stdout, m))

输出(在Go Playground上尝试):

<div>Foobar Bob</div><nil>

(结尾的<nil>template.Execute()返回的错误值,表明执行模板没有错误。)