Gin 默认不提供静态资源服务,需显式注册 Static 路由才能让浏览器通过 /css/index.css 等路径访问样式文件;否则 HTML 中引用的 CSS 会返回 404。
gin 默认不提供静态资源服务,需显式注册 `static` 路由才能让浏览器通过 `/css/index.css` 等路径访问样式文件;否则 html 中引用的 css 会返回 404。
在 Gin 应用中,LoadHTMLFiles() 仅负责加载并解析 HTML 模板(如 index.tmpl.html),它不会自动托管模板中引用的外部资源(如 CSS、JS、图片)。当你在
✅ 正确做法是:使用 r.Static() 显式声明静态文件服务路径,将 URL 前缀(如 /css)映射到本地文件系统目录(如 ../templates/css):
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
// main.go
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// ✅ 加载 HTML 模板(注意路径需与实际结构一致)
r.LoadHTMLFiles("../templates/index.tmpl.html")
// ✅ 关键:为 CSS 文件启用静态服务
// 浏览器请求 /css/index.css → Gin 自动从 ../templates/css/index.css 读取并返回
r.Static("/css", "../templates/css")
// ✅ 注册页面路由
r.GET("/index", func(c *gin.Context) {
c.HTML(200, "index.tmpl.html", gin.H{
"title": "Main website",
})
})
r.Run(":8080")
}
? 注意事项与最佳实践:
- r.Static(prefix, root) 中:
- prefix 是浏览器请求的 URL 路径前缀(必须以 / 开头,如 /css、/static);
- root 是本地磁盘上的绝对或相对路径(相对于当前工作目录),必须指向包含实际文件的目录(如 ../templates/css,而非 ../templates/css/index.css)。
- 推荐统一静态资源路径,例如将所有静态文件放入 assets/ 目录,并配置:
r.Static("/static", "./assets") // 对应 HTML 中引用: <link href="/static/css/index.css"> - 避免在 HTML 中使用 @import(尤其嵌套在
- 确保工作目录正确:运行 go run main.go 时,终端当前路径应为 workspace/(即 main/ 和 templates/ 的父目录),否则 ../templates/... 路径会失效。可通过 os.Getwd() 调试确认。
? 总结:Gin 的模板渲染与静态资源服务是两个正交功能 —— LoadHTMLFiles() 解决“渲染什么”,Static() 解决“如何提供依赖资源”。二者配合,才能构建完整的 Web 页面服务。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










