4.6 文本和HTML模板

模板语法

模板由普通文本和 {{action}} 组成。. 表示当前值,| 是管道操作符。

const templ = `{{.TotalCount}} issues:
{{range .Items}}----------------------------------------
Number: {{.Number}}
User:   {{.User.Login}}
Title:  {{.Title | printf "%.64s"}}
Age:    {{.CreatedAt | daysAgo}} days
{{end}}`

使用流程

分两步:解析模板 + 执行模板

report, err := template.New("report").
    Funcs(template.FuncMap{"daysAgo": daysAgo}).
    Parse(templ)

template.Must 解析失败直接 panic,省去手动检查。

html/template 与自动转义

html/template API 与 text/template 相同,但会自动转义 HTML 特殊字符,防止 XSS。若需要输出原始 HTML,用 template.HTML 类型标记为受信任内容。

要点

  • text/template 输出纯文本,html/template 输出 HTML 并自动转义
  • 模板语言支持 . 字段访问、| 管道、range 循环、if-else
  • Funcs() 注册自定义函数后才能在模板中调用

来源:Go 语言圣经 - 4.6 文本和HTML模板