与往常一样,该文档是一个很好的起点。
我在操场上写了一个工作实例
解释一下:
- 您不需要struct文字中的字符串:
&Tags{Id: 1},而不是&Tags{"Id":1} - 您只能将单个对象传递给模板才能执行,这将按照
{{template <name> <arg>}}指令中的要求将对象分配给每个子模板。我使用了一个临时Page
结构,但是map[string]interface{}如果您愿意,可以这样做。 - 您需要解析每个模板(我在Playground中使用了字符串,但是如果您已经有了html文件,则ParseFiles可以这样做)
- 我使用os.Stdout来执行它,但是显然应该用相应的替换
ResponseWriter
以及整个代码:
package mainimport "fmt"import "html/template"import "os"var page = `<html> <body> {{template "tags" .Tags}} {{template "content" .Content}} {{template "comment" .Comment}} </body></html>`var tags = `{{define "tags"}}<div> {{.Name}}<div>{{end}}`var content = `{{define "content"}}<div> <p>{{.Title}}</p> <p>{{.Content}}</p></div>{{end}}`var comment = `{{define "comment"}}<div> {{.Note}}</div>{{end}}`type Tags struct { Id int Name string}type Content struct { Id int Title string Content string}type Comment struct { Id int Note string}type Page struct { Tags *Tags Content *Content Comment *Comment}func main() { pagedata:= &Page{Tags:&Tags{Id:1, Name:"golang"},Content: &Content{Id:9, Title:"Hello", Content:"World!"},Comment: &Comment{Id:2, Note:"Good Day!"}} tmpl := template.New("page") var err error if tmpl, err = tmpl.Parse(page); err != nil { fmt.Println(err) } if tmpl, err = tmpl.Parse(tags); err != nil { fmt.Println(err) } if tmpl, err = tmpl.Parse(comment); err != nil { fmt.Println(err) } if tmpl, err = tmpl.Parse(content); err != nil { fmt.Println(err) } tmpl.Execute(os.Stdout, pagedata)}


