在 Go 中将多个结构传递到 ExecuteTemplate - 最佳实践
Pass multiple structs into ExecuteTemplate in Go - best practice
目前我正在将多个结构传递给 ExecuteTemplate,但是是否有更高效、更简洁或不同的方法来执行此操作?
去
type user struct {
Username string
Password string
}
type meta struct {
Title string
Content string
}
func index(w http.ResponseWriter, req *http.Request) {
u := getUser(w, req)
m := meta{
Title: "Homepage",
Content: "Homepage meta content",
}
users := []user{u}
metas := []meta{m}
data := struct {
User []user
Meta []meta
}{
users,
metas,
}
err := tpl.ExecuteTemplate(w, "index.html", data)
if err != nil {
log.Fatalln(err)
}
}
HTML
{{range .Meta}}
{{.Title}}
{{.Content}}
{{end}}
使用地图可以更简洁地实现相同的目的:
err := tpl.ExecuteTemplate(w, "index.html", map[string]interface{}{"User":[]user{u},
"Meta":[]meta{m}})
目前我正在将多个结构传递给 ExecuteTemplate,但是是否有更高效、更简洁或不同的方法来执行此操作?
去
type user struct {
Username string
Password string
}
type meta struct {
Title string
Content string
}
func index(w http.ResponseWriter, req *http.Request) {
u := getUser(w, req)
m := meta{
Title: "Homepage",
Content: "Homepage meta content",
}
users := []user{u}
metas := []meta{m}
data := struct {
User []user
Meta []meta
}{
users,
metas,
}
err := tpl.ExecuteTemplate(w, "index.html", data)
if err != nil {
log.Fatalln(err)
}
}
HTML
{{range .Meta}}
{{.Title}}
{{.Content}}
{{end}}
使用地图可以更简洁地实现相同的目的:
err := tpl.ExecuteTemplate(w, "index.html", map[string]interface{}{"User":[]user{u},
"Meta":[]meta{m}})