使用Golang的html/template可安全渲染动态数据,通过定义模板文件、准备可导出字段的数据结构,并调用Execute方法注入数据,自动转义防止XSS。

使用Golang的
html/template包向网页动态渲染数据,核心是定义模板文件、准备数据结构,并通过
Execute方法将数据注入HTML。整个过程安全且防止XSS攻击,因为模板会自动转义特殊字符。
定义HTML模板文件
在项目中创建一个HTML文件,比如
index.html,放在
templates/目录下:
<!DOCTYPE html>
<html>
<head><title>用户信息</title></head>
<body>
<h1>欢迎,{{.Name}}!</h1>
<p>你今年 {{.Age}} 岁。</p>
<ul>
{{range .Hobbies}}
<li>{{.}}</li>
{{end}}
</ul>
</body>
</html>
这里
{{.Name}}、{{.Age}}和{{range .Hobbies}}是模板语法,用于插入数据。
准备数据结构并渲染
在Go代码中,使用
template.ParseFiles加载模板,然后通过
Execute传入数据:
立即学习“go语言免费学习笔记(深入)”;
package main
import (
"html/template"
"log"
"net/http"
)
type User struct {
Name string
Age int
Hobbies []string
}
func handler(w http.ResponseWriter, r *http.Request) {
// 定义数据
user := User{
Name: "张三",
Age: 25,
Hobbies: []string{"读书", "游泳", "编程"},
}
// 解析模板文件
tmpl, err := template.ParseFiles("templates/index.html")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 执行模板,将数据写入响应
err = tmpl.Execute(w, user)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
func main() {
http.HandleFunc("/", handler)
log.Println("服务器启动在 http://localhost:8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
启动服务后访问
http://localhost:8080,页面会显示填充后的用户信息。
处理复杂数据与模板复用
支持嵌套结构、map、条件判断等。例如模板中使用
{{if .IsAdult}}...{{end}}:
{{if ge .Age 18}}
<p>你是成年人。</p>
{{else}}
<p>你还未成年。</p>
{{end}}
也可以使用
template.ParseGlob加载多个模板,或通过
{{template "header"}}实现布局复用。
基本上就这些。只要数据结构和模板字段匹配,
html/template就能安全地渲染动态内容。注意字段必须是可导出的(首字母大写),否则无法访问。不复杂但容易忽略。










