Go 语言的 html/template
包提供了一个强大而灵活的模板引擎,用于在 HTML 或其他文本中嵌入动态内容。这篇博客将深入介绍 html/template
包,包括模板语法、数据绑定和一些实际应用示例。
1. 引入包
首先,确保你已经安装了 Go 语言环境。然后在你的代码中引入 html/template
包:
import (
"html/template"
"os"
)
2. 创建模板
创建一个简单的 HTML 模板文件,例如 template.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{.Title}}</title>
</head>
<body>
<h1>{{.Header}}</h1>
<ul>
{{range .Items}}
<li>{{.}}</li>
{{end}}
</ul>
</body>
</html>
在这个模板中,我们使用了 Go 模板的语法,例如 {{.Title}}
和 {{range .Items}}
,它们会在执行模板时被替换为相应的数据。
3. 准备数据
在 Go 代码中准备一些数据,用于填充模板:
type Page struct {
Title string
Header string
Items []string
}
func main() {
page := Page{
Title: "My Page",
Header: "Welcome to My Page",
Items: []string{"Item 1", "Item 2", "Item 3"},
}
}
4. 解析模板
使用 template.ParseFiles
函数来解析模板文件:
t, err := template.ParseFiles("template.html")
if err != nil {
panic(err)
}
5. 渲染模板
创建一个 os.File
以便将渲染后的结果写入:
output, err := os.Create("output.html")
if err != nil {
panic(err)
}
// 渲染模板并将结果写入文件
err = t.Execute(output, page)
if err != nil {
panic(err)
}
6. 模板函数
html/template
包还支持自定义模板函数。例如,我们可以定义一个函数来格式化日期:
func formatDate(t time.Time) string {
return t.Format("2006-01-02")
}
在模板中使用这个函数:
<p>Today is {{.Date | formatDate}}</p>
在代码中注册这个函数:
t = t.Funcs(template.FuncMap{"formatDate": formatDate})
7. 条件语句
模板中的条件语句:
{{if .Condition}}
<p>This is true.</p>
{{else}}
<p>This is false.</p>
{{end}}
8. 循环语句
模板中的循环语句:
<ul>
{{range .Items}}
<li>{{.}}</li>
{{end}}
</ul>
9. 嵌套模板
创建一个包含其他模板的主模板:
{{template "header" .}}
{{template "content" .}}
{{template "footer" .}}
10. 完整示例
下面是一个完整的示例,包括创建模板文件、准备数据、解析和渲染模板的所有步骤:
package main
import (
"html/template"
"os"
"time"
)
type Page struct {
Title string
Header string
Items []string
Condition bool
Date time.Time
}
func formatDate(t time.Time) string {
return t.Format("2006-01-02")
}
func main() {
page := Page{
Title: "My Page",
Header: "Welcome to My Page",
Items: []string{"Item 1", "Item 2", "Item 3"},
Condition: true,
Date: time.Now(),
}
t, err := template.New("template").Funcs(template.FuncMap{"formatDate": formatDate}).ParseFiles("template.html")
if err != nil {
panic(err)
}
output, err := os.Create("output.html")
if err != nil {
panic(err)
}
err = t.Execute(output, page)
if err != nil {
panic(err)
}
}
这个示例演示了如何使用 html/template
包创建、解析和渲染模板,以及如何使用自定义函数、条件语句、循环语句和嵌套模板。希望这篇博客对你深入了解 Go 语言中的 HTML/Template 包有所帮助。