go 的 `html/template` 包提供了 `template.html` 等类型,用于标记已转义的安全 html 内容,避免模板自动转义;需通过包名限定访问,不可直接使用未限定的 `html` 标识符。
在 Go 中,html/template 包定义了多个类型(如 HTML、JS、URL、CSS 等),它们本质上是带安全语义的字符串别名,用于向模板引擎表
明该内容已由开发者验证为安全,无需再进行 HTML 转义。但这些类型并非裸露在全局作用域中,而是定义在 template 子包内(即 html/template 包的内部),因此必须通过包名显式限定使用。
✅ 正确用法如下:
package main
import (
"fmt"
"html/template"
)
func main() {
// 使用 template.HTML(...) 构造安全 HTML 值
safeHTML := template.HTML(`Hello, World!`)
fmt.Println(safeHTML) // 输出: Hello, World!
}⚠️ 常见错误示例(会导致编译失败):
// ❌ 错误:HTML 未定义(无此全局类型) // fmt.Println(HTML(`Hi`)) // ❌ 错误:试图从 html 包导入(html 包不导出 HTML 类型) // import "html" // ← 不要这样做
? 关键要点:
立即学习“前端免费学习笔记(深入)”;
? 扩展用法示例(结合模板):
t := template.Must(template.New("demo").Parse(`{{.}}`))
t.Execute(os.Stdout, template.HTML(`Trusted Content
`)) // 渲染为原始 HTML总之,记住口诀:“HTML 类型属于 template,调用必加包前缀” —— 即 template.HTML(...),而非 HTML(...) 或 html.HTML(...)。