[英]How to range over slice of structs instead of struct of slices
在玩過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旁邊顯示每個ID。 我會發現在顯示時將每個用戶視為一個對象來對其屬性進行分組是更合乎邏輯的。
因此,我的問題是:
如果我想將結構片段傳遞給模板怎么辦? 使這項工作可行的語法是什么? 我尚未在官方html / template doc中找到或了解如何進行操作。 我想像的東西看起來像這樣:
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不久將出版。 請參閱Go語言網絡編程:使用和保護網絡的基本技能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.