{{.Heading}}
{{.Paragraph}}
``` ### 2. 解析模板文件 定义好模板文件后,你需要在Go代码中解析这些文件,以获得模板对象。`html/template`包提供了多种方法来解析模板文件,例如`ParseFiles`、`ParseGlob`等。 ```go package main import ( "html/template" "log" ) func main() { tmpl, err := template.ParseFiles("index.tmpl") if err != nil { log.Fatalf("parsing template: %v", err) } // 现在tmpl是一个模板对象,可以用于渲染 } ``` ### 3. 渲染模板文件 解析模板文件后,你可以使用模板对象来渲染模板。这通常涉及到将模板与一些数据结合,然后将结果输出到响应中。`html/template`包提供了`Execute`和`ExecuteTemplate`方法来执行渲染操作。 ```go package main import ( "html/template" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { tmpl, err := template.ParseFiles("index.tmpl") if err != nil { log.Printf("parsing template: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } data := struct { Title string Heading string Paragraph string }{ Title: "我的网页", Heading: "欢迎来到我的网站", Paragraph: "这是一个使用Go语言`html/template`包渲染的网页。", } err = tmpl.Execute(w, data) if err != nil { log.Printf("executing template: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } }) log.Println("Server is listening on http://localhost:8080") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatalf("starting server: %v", err) } } ``` 在上面的例子中,我们定义了一个`struct`类型的数据`data`,并将其传递给`tmpl.Execute`方法。这个方法将模板`index.tmpl`与`data`结合,并将结果写入HTTP响应中。 ### 模板的嵌套与包含 `html/template`包还支持模板的嵌套与包含,使得你能够定义可复用的模板片段。通过`{{define "template_name"}}`来定义模板,并通过`{{template "template_name" .}}`来在另一个模板中包含它。 例如,你可以定义`header.tmpl`、`footer.tmpl`等模板文件,并在主模板文件中通过`{{template "header"}}`和`{{template "footer"}}`来包含它们。 总的来说,`html/template`包为Go语言提供了强大而灵活的模板渲染能力,使得在Web开发中能够轻松实现动态内容的生成。