这是完整的工作示例。
// home.html inside temps folder{{define "homeHTML"}}{{template "headHTML" .}}{{template "headerHTML" .}}{{template "footerHTML" .}}{{end}}// head.html inside data folder{{define "headHTML"}}<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>{{.title}} - MySite</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> {{end}}// header.html inside data folder{{define "headerHTML"}}<header> {{.header}} <h1>Welcome to my site!</h1> <br> <nav> <a href="/">Home</a> </nav></header>{{end}}// footer.html inside data folder{{define "footerHTML"}}<h1>Welcome! {{.footer}}</h1><footer><p>Thank You for Visiting</p></footer></body></html>{{end}}和代码将是这样的
package mainimport ( "html/template" "io/ioutil" "net/http" "path/filepath" "strings")var tPath = "./temps/"var dPath = "./data/"var templateDirs = []string{"temps", "data"}var templates *template.Templatefunc getTemplates() (templates *template.Template, err error) { var allFiles []string for _, dir := range templateDirs { files2, _ := ioutil.ReadDir(dir) for _, file := range files2 { filename := file.Name() if strings.HasSuffix(filename, ".html") { filePath := filepath.Join(dir, filename) allFiles = append(allFiles, filePath) } } } templates, err = template.New("").ParseFiles(allFiles...) return}func init() { templates, _ = getTemplates()}func rootHandler(wr http.ResponseWriter, req *http.Request) { title := "home" data:= map[string]interface{}{ "title": title, "header": "My Header", "footer": "My Footer", } err := templates.ExecuteTemplate(wr, "homeHTML", data) if err != nil { http.Error(wr, err.Error(), http.StatusInternalServerError) }}func main() { http.HandleFunc("/", rootHandler) http.ListenAndServe(":8080", nil)}


