模板基础
Go语言模板包是用于生成文本输出的工具,它通过解析模板文本并结合数据生成最终的输出文本。模板语法简洁而强大,包括模板标记、变量输出、控制结构和模板函数等。模板对象表示已解析和编译的模板,可以执行并输出最终文本。模板包的工作原理主要包括模板解析、数据传递和模板执行三个步骤。
text/template
和 html/template
是 Go 语言模板包的两个子包,用于生成文本输出和 HTML 输出。
text/template
用于生成任意文本格式的模板,不会自动对输出内容进行 HTML 转义。html/template
专门用于生成 HTML 文档的模板,会自动对输出内容进行 HTML 转义,防止 XSS 攻击。
在浏览器中展示 text/template
的输出时,浏览器也会进行 HTML 转义。这是因为浏览器默认会将接收到的文本内容视为 HTML,从而进行相应的转义处理。因此,无论是 text/template
还是 html/template
生成的内容,在浏览器中显示时都会经过 HTML 转义。所以一般推荐使用
text/template
。
模板使用
- 导入模板库
import "text/template"
- 定义模板
const textTemplate = "Hello, {
{.Name}}! Today is {
{.Day}}."
或准备模板文件index.tmpl
Hello, {
{.Name}}! Today is {
{.Day}}.
- 解析模板
解析定义的模板
tmpl, err := template.New("text_template").Parse(textTemplate)
if err != nil {
panic(err)
}
或者解析本地准备好的模板文件index.tmpl
tmpl, err := template.ParseFiles("index.tmpl")
if err != nil {
panic(err)
}
- 准备数据
data := struct {
Name string
Day string
}{
Name: "Alice",
Day: "Monday",
}
- 执行模板
err = tmpl.Execute(os.Stdout, data)
if err != nil {
panic(err)
}
完成代码示例