Go Web开发框架实践:模板渲染与静态资源服务

Gin 不仅适合构建 API 服务,也支持 HTML 模板渲染和静态资源托管,使其可以胜任中小型网站开发任务。


一、模板渲染基础

1. 加载模板文件

使用 LoadHTMLGlobLoadHTMLFiles 方法加载模板:

css 复制代码
r := gin.Default()
r.LoadHTMLGlob("templates/*") // 支持通配符

或:

arduino 复制代码
r.LoadHTMLFiles("templates/index.tmpl", "templates/user.tmpl")

2. 定义模板文件(templates/index.tmpl)

xml 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>{{ .Title }}</title>
</head>
<body>
    <h1>Hello, {{ .User }}</h1>
</body>
</html>

3. 渲染模板响应

go 复制代码
r.GET("/", func(c *gin.Context) {
    c.HTML(200, "index.tmpl", gin.H{
        "Title": "首页",
        "User":  "Gopher",
    })
})

二、模板语法简介(兼容 Go 的 html/template)

1. 输出变量

css 复制代码
<p>{{ .Name }}</p>

2. 条件语句

css 复制代码
{{ if .Login }}
    <p>Welcome back!</p>
{{ else }}
    <p>Please login.</p>
{{ end }}

3. 循环遍历

css 复制代码
<ul>
    {{ range .Items }}
        <li>{{ . }}</li>
    {{ end }}
</ul>

4. 使用管道函数

css 复制代码
<p>{{ .Content | html }}</p>

三、自定义模板函数

go 复制代码
r.SetFuncMap(template.FuncMap{
    "formatDate": func(t time.Time) string {
        return t.Format("2006-01-02")
    },
})
r.LoadHTMLGlob("templates/*")

模板中使用:

css 复制代码
<p>发布日期:{{ .CreatedAt | formatDate }}</p>

四、静态资源服务

1. 基础静态目录映射

/static 路径映射到本地 assets 目录:

vbnet 复制代码
r.Static("/static", "./assets")

访问方式:

bash 复制代码
http://localhost:8080/static/css/style.css

2. 映射单个文件(如 favicon)

arduino 复制代码
r.StaticFile("/favicon.ico", "./assets/favicon.ico")

五、模板热重载(开发调试推荐)

开发阶段可使用第三方工具(如 air)实现模板与代码热重载,提升效率。

安装:

bash 复制代码
go install github.com/cosmtrek/air@latest

运行:

复制代码
air

六、示例:构建一个带静态资源和模板页面的简单博客首页

go 复制代码
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

xml 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>{{ .Title }}</title>
    <link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
    <h1>{{ .Title }}</h1>
    <ul>
        {{ range .Posts }}
            <li>{{ . }}</li>
        {{ end }}
    </ul>
</body>
</html>

七、小结

功能 优点说明
模板渲染 使用 Go 原生 html/template,安全高效
支持条件与循环 动态页面结构易于控制
静态资源托管 支持 JS、CSS、图片等静态内容一键映射
自定义模板函数 灵活扩展渲染逻辑

相关推荐
企业数字化笔记38 分钟前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
西瓜太郎123442 分钟前
request_id 如何串起请求、路由、计费和日志
后端·python
by组态1 小时前
Ricon组态系统通信配置指南
前端·后端·物联网
sbjdhjd1 小时前
ThinkPHP 5.0.10 缓存写入型 RCE 复盘:从手动搭建、换行绕过到源码单步验证 | 05
java·后端·安全·spring·网络安全·数据挖掘·php
LEE1 小时前
Agent 的控制权,为什么正在回到模型手里?
前端·后端
沃夫上校1 小时前
跨域这件事,其实浏览器在替你挡刀
前端·后端·nginx
用户298698530141 小时前
Python 将 Word 文档转换为图片的实践指南
后端·python·api
旺仔不是程序员1 小时前
致命索引失效:索引列运算与函数索引不匹配
数据库·后端·面试
老孙讲技术1 小时前
把连锁门店轮询抓拍和遮挡叫醒接进督导台-setDeviceSnapEnhanced与setMessageCallback
后端·物联网·音视频开发
EatFan1 小时前
前后端分离项目中 Token 到底应该怎么设计?Access Token + Refresh Token 实战
java·前端·后端