和往常一样,the doc是一个很好的起点.
解释一下:
>你不需要在结构文字中使用字符串:&标签{Id:1},而不是&标签{“Id”:1}@H_301_34@>您只能将单个对象传递给您的模板来执行,这将按照{{template< name> < arg>}}指令.我使用了一个ad-hoc页面结构,但是如果你喜欢,map [string] interface {}将会做.@H_301_34@>你需要解析每个模板(我在游乐场中使用了字符串,但是如果你的html文件已经有ParseFiles的话)@H_301_34@>我使用os.Stdout执行它,但是你应该明显地替换相应的ResponseWriter
而整个代码:
package main
import "fmt"
import "html/template"
import "os"
var page = `
{{template "tags" .Tags}}
{{template "content" .Content}}
{{template "comment" .Comment}}
`
var tags = `{{define "tags"}}
{{.Name}}
{{end}}`
var content = `{{define "content"}}
{{.Title}}
{{.Content}}
{{end}}`
var comment = `{{define "comment"}}
{{.Note}}
{{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)
}