Go语言template包是生成动态文本的核心工具,支持变量渲染、条件判断、循环控制、HTML自动转义及模板组合复用,安全高效且无外部依赖。

Go语言的template包是生成动态文本(包括HTML)的核心工具,它通过数据驱动的方式将结构化数据注入预定义模板,安全、高效且无依赖。
基础语法与变量渲染
模板使用双花括号{{ }}包裹指令,最常用的是点号.表示当前传入的数据上下文。例如:
模板字符串:"Hello, {{ .Name }}! You have {{ .Count }} messages."
配合结构体数据:type User struct { Name string; Count int }
data := User{Name: "Alice", Count: 5}
调用tmpl.Execute(os.Stdout, data)将输出:Hello, Alice! You have 5 messages.
条件判断与循环控制
模板支持{{if}}、{{range}}等控制结构,无需在Go代码中拼接逻辑:
立即学习“go语言免费学习笔记(深入)”;
{{if .Active}}Online{{else}}Offline{{end}}-
{{range .Items}}—— 遍历切片或map,- {{.Title}}
{{end}}.在range内代表当前元素 - 支持
{{with}}简化嵌套字段访问:{{with .Profile}}{{.Nickname}}
{{end}}
HTML自动转义与安全渲染
默认情况下,html/template会对变量内容执行HTML转义,防止XSS攻击。例如:{{.Bio}}中若含,会被渲染为纯文本。
如需原样输出HTML(确保内容可信),使用{{.HTMLContent | safeHTML}},其中safeHTML是内置函数;也可自定义函数返回template.HTML类型值。
模板组合与复用
大型页面常拆分为多个模板文件(如header.html、list.html、footer.html),通过{{template "name" .}}引入:
- 用
template.Must(template.ParseFiles("base.html", "list.html"))加载多个文件 - 主模板中定义
{{define "main"}}...{{end}},子模板用{{template "main" .}}调用 - 支持参数传递:
{{template "item" .CurrentItem}}











