转到模板:覆盖结构切片而不是切片结构

Nic*_*all 13 html templates struct go go-templates

稍微使用了Golang的HTML模板,我发现在模板中循环对象的所有示例都是将切片的结构传递给模板,有点像这个示例:

type UserList struct {
    Id   []int
    Name []string
}

var templates = template.Must(template.ParseFiles("main.html"))

func rootHandler(w http.ResponseWriter, r *http.Request) {
    users := UserList{
        Id:   []int{0, 1, 2, 3, 4, 5, 6, 7},
        Name: []string{"user0", "user1", "user2", "user3", "user4"},
    }
    templates.ExecuteTemplate(w, "main", &users)
}
Run Code Online (Sandbox Code Playgroud)

使用"主"模板:

{{define "main"}}
    {{range .Name}}
        {{.}}
    {{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我不明白如果我只在.Name属性上,我应该如何显示其相应名称旁边的每个ID.我会发现将每个用户视为一个对象,在显示时对其属性进行分组更合乎逻辑.

因此我的问题:

现在,如果我想将一片结构传递给模板怎么办?使这项工作的语法是什么?我还没有找到或理解如何在官方的html /模板文档中.我想象这样的东西像这样:

type User struct {
    Id   int
    Name string
}
type UserList []User
var myuserlist UserList = ...
Run Code Online (Sandbox Code Playgroud)

和模板看起来有点像这样:(这里的语法故意错,只是为了理解)

{{define "main"}}
    {{for each User from myuserlist as myuser}}
        {{myuser.Id}}
        {{myuser.Name}}
    {{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud)

nvc*_*nvn 33

使用:

{{range .}}
    {{.Id}}
    {{.Name}}
{{end}}
Run Code Online (Sandbox Code Playgroud)

为模板.
下面是一个示例:http://play.golang.org/p/A4BPJOcfpB
您需要阅读有关包概述中"点"的更多信息,以了解如何正确使用它.http://golang.org/pkg/text/template/#pkg-overview(checkout the Pipelines部分)