17370845950

如何使用Golang template生成动态文本_结合HTML模板渲染内容
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代码中拼接逻辑:

  • {{if .Active}}Online{{else}}Offline{{end}}
  • {{range .Items}}
  • {{.Title}}
  • {{end}} —— 遍历切片或map,.在range内代表当前元素
  • 支持{{with}}简化嵌套字段访问:{{with .Profile}}

    {{.Nickname}}

    {{end}}

HTML自动转义与安全渲染

默认情况下,html/template会对变量内容执行HTML转义,防止XSS攻击。例如:{{.Bio}}中若含,会被渲染为纯文本。

如需原样输出HTML(确保内容可信),使用{{.HTMLContent | safeHTML}},其中safeHTML是内置函数;也可自定义函数返回template.HTML类型值。

模板组合与复用

大型页面常拆分为多个模板文件(如header.htmllist.htmlfooter.html),通过{{template "name" .}}引入:

  • template.Must(template.ParseFiles("base.html", "list.html"))加载多个文件
  • 主模板中定义{{define "main"}}...{{end}},子模板用{{template "main" .}}调用
  • 支持参数传递:{{template "item" .CurrentItem}}