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/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}}