稍微使用了Go 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)
}
使用“主”模板:
{{define "main"}}
{{range .Name}}
{{.}}
{{end}}
{{end}}
这是有效的,但我不明白如果我只在.Name属性上,我应该如何显示其相应名称旁边的每个ID。我会发现将每个用户视为一个对象,在显示时对其属性进行分组更合乎逻辑。
因此我的问题:
如果我想将一片结构传递给模板怎么办?使这项工作的语法是什么?我还没有找到或理解如何在官方的html /模板文档中。我想象这样的东西像这样:
type User struct {
Id int
Name string
}
type UserList []User
var myuserlist UserList = ...
和模板看起来有点像这样:(这里的语法故意错,只是为了理解)
{{define "main"}}
{{for each User from myuserlist as myuser}}
{{myuser.Id}}
{{myuser.Name}}
{{end}}
{{end}}
使用:
{{range .}}
{{.Id}}
{{.Name}}
{{end}}
为模板。 这是一个例子:http://play.golang.org/p/A4BPJOcfpB 您需要阅读包概述中有关“点”的更多信息,以了解如何正确使用它。 http://golang.org/pkg/text/template/#pkg-overview(结帐管道部分)
我没有代表发表评论,但回答@ROMANIA_engineer,elithrar引用的来源已经退休,对于仍在寻找此引用的人:
这本书已被删除,因为它将很快由APress出版。请参阅Network Programming with Go: Essential Skills for Using and Securing Networks