Go template包通过结构化数据驱动模板生成HTML或文本,支持内联/文件模板、嵌套继承、安全转义及条件循环语法,需导出字段且自动处理nil。

Go 的 template 包是生成动态 HTML 或纯文本的高效工具,核心在于“数据驱动模板”——用结构化数据(如 struct、map)填充预定义的模板字符串,安全、灵活、无依赖。
定义并解析模板
模板可以内嵌在代码中,也可从文件加载。使用 template.New 创建模板对象,再用 Parse 或 ParseFiles 加载内容:
- 内联模板:适合简单场景,用反引号包裹,保留换行和空格
- 文件模板:推荐用于 HTML 页面,支持嵌套(
{{template "name" .}})和继承({{define "main"}}...{{end}})
注意:解析失败会返回 error,务必检查;重复调用 Parse 会覆盖已有定义,可改用 ParseGlob 批量加载。
传入数据并执行渲染
调用 Execute(写入 io.Writer,如 http.ResponseWriter 或 bytes.Buffer)或 ExecuteToString(返回字符串):
系统简介逍遥内容管理系统(CarefreeCMS)是一款功能强大、易于使用的内容管理平台,采用前后端分离架构,支持静态页面生成,适用于个人博客、企业网站、新闻媒体等各类内容发布场景。核心特性1、模板套装系统 - 支持多套模板自由切换,快速定制网站风格2、静态页面生成 - 一键生成纯静态HTML页面,访问速度快,SEO友好3、文章管理 - 支持富文本编辑、草稿保存、文章属性标记、自动提取SEO4、全
立即学习“go语言免费学习笔记(深入)”;
- 数据必须是导出字段(首字母大写)的 struct、map 或基本类型
- 模板中用
{{.FieldName}}访问结构体字段,{{.Key}}访问 map 元素 - 支持链式访问:
{{.User.Profile.AvatarURL}},自动处理 nil 指针(不 panic,输出空)
常用控制语法与安全要点
模板语法简洁但功能完整:
- 条件判断:
{{if .Active}}在线{{else}}离线{{end}} - 循环遍历:
{{range .Items}}{{.Name}} {{end}},{{range $index, $item := .Items}}获取索引 - HTML 自动转义:
{{.Content}}会转义、&等字符,防止 XSS;需原样输出时用{{.Content | safeHTML}}(仅限可信内容) - 自定义函数:用
Funcs注册,例如add、date、truncate等辅助逻辑
实用技巧与常见避坑
提升开发效率和运行健壮性:
- 模板命名区分用途:如
"user_list.html"、"email.txt",避免同名覆盖 - 错误处理别忽略:执行时可能因字段缺失、类型不匹配失败,建议用
template.Must在启动时捕获解析错误 - HTML 模板建议加
text/template注释说明用途,便于团队协作 - 大量重复逻辑可抽为
define模板块,再用template调用,提高复用性










