Gin 不仅适合构建 API 服务,也支持 HTML 模板渲染和静态资源托管,使其可以胜任中小型网站开发任务。
使用 LoadHTMLGlob
或 LoadHTMLFiles
方法加载模板:
r := gin.Default()
r.LoadHTMLGlob("templates/*") // 支持通配符
或:
r.LoadHTMLFiles("templates/index.tmpl", "templates/user.tmpl")
{{ .Title }}
Hello, {{ .User }}
r.GET("/", func(c *gin.Context) {
c.HTML(200, "index.tmpl", gin.H{
"Title": "首页",
"User": "Gopher",
})
})
{{ .Name }}
{{ if .Login }}
Welcome back!
{{ else }}
Please login.
{{ end }}
{{ range .Items }}
- {{ . }}
{{ end }}
{{ .Content | html }}
r.SetFuncMap(template.FuncMap{
"formatDate": func(t time.Time) string {
return t.Format("2006-01-02")
},
})
r.LoadHTMLGlob("templates/*")
模板中使用:
发布日期:{{ .CreatedAt | formatDate }}
将 /static
路径映射到本地 assets
目录:
r.Static("/static", "./assets")
访问方式:
http://localhost:8080/static/css/style.css
r.StaticFile("/favicon.ico", "./assets/favicon.ico")
开发阶段可使用第三方工具(如 air)实现模板与代码热重载,提升效率。
安装:
go install github.com/cosmtrek/air@latest
运行:
air
func main() {
r := gin.Default()
r.LoadHTMLGlob("templates/*")
r.Static("/static", "./assets")
r.GET("/", func(c *gin.Context) {
posts := []string{"Go 入门", "Gin 实战", "部署技巧"}
c.HTML(200, "index.tmpl", gin.H{
"Title": "Golang 博客",
"Posts": posts,
})
})
r.Run()
}
模板内容:templates/index.tmpl
{{ .Title }}
{{ .Title }}
{{ range .Posts }}
- {{ . }}
{{ end }}
功能 | 优点说明 |
模板渲染 | 使用 Go 原生 html/template ,安全高效 |
支持条件与循环 | 动态页面结构易于控制 |
静态资源托管 | 支持 JS、CSS、图片等静态内容一键映射 |
自定义模板函数 | 灵活扩展渲染逻辑 |