Go Web开发应优先使用标准库html/template,静态资源通过http.FileServer或Nginx托管,依赖显式引入、编译时确定,避免运行时动态处理。
Go 语言本身不内置模板引擎和静态资源管理工具,但生态中已有成熟、轻量、易集成的方案。关键不是“安装”,而是引入依赖 + 合理组织代码——Golang 的 Web 工具链强调显式依赖和编译时确定性,没有类似 Node.js 的全局 CLI 工具概念。
html/template 是 Go 标准库自带的,安全(自动转义)、稳定、无需额外安装。90% 的服务端渲染需求它都够用。
import "html/template"
{{if .IsAdmin}}管理员{{end}}
pongo2(Django 风格)或 jet(编译型,性能高)go get github.com/flosch/pongo2/v4,然后在代码中调用 pongo2.Must(pongo2.FromFile("views/index.html"))
Go 不推荐运行时动态压缩或打包 JS/CSS。主流做法是:开发期用简单文件服务,生产期由 Nginx 或构建工具处理。
http.FileServer 挂载 ./static 目录,例如:http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))))
./static 整个目录交给 Nginx 提供,开启 gzip 和缓存头;或使用 go:embed 将静态文件编译进二进制(适合小项目)./static 即可对新手或中小项目,建议用最简组合,避免过早引入复杂抽象:
net/http 或轻量框架如 chi(go get github.com/go-chi/chi/v5)html/template,放在 ./templates/ 下,用 template.ParseGlob("templates/*.html") 加载./static/,用 http.FileServer 暴露,前端引用 /static/css/app.css
os.Getenv("ENV") 控制是否启用模板缓存或静态文件热加载有些习惯来自其他语言,但在 Go 中反而增加维护成本:
air 或 fresh 监听代码变化并重启进程,静态文件本身不用热重载)