当前位置: 首页 > news >正文

Go语言实战案例:静态资源服务(CSS、JS、图片)

在 Web 开发中,除了提供 API 接口外,往往还需要对外提供静态资源服务,比如:

  • • CSS 样式文件
  • • JavaScript 脚本
  • • 图片、字体等静态资源

Go 的 net/http 包和 Gin 框架都提供了方便的方式来托管这些静态文件。
本篇我们将用 Gin 框架 演示如何快速构建一个静态资源服务。


一、功能目标

  1. 1. 使用 Gin 提供一个静态资源目录,让用户能直接访问 CSS、JS、图片。
  2. 2. 演示 HTML 页面引入这些静态资源。
  3. 3. 支持前端直接访问 /static/... 路径获取文件。

二、项目结构

假设我们的项目目录结构如下:

project/
│── main.go
│── static/
│     ├── css/
│     │    └── style.css
│     ├── js/
│     │    └── app.js
│     └── images/
│          └── logo.png
└── templates/└── index.html

三、代码实现

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()// 1. 加载模板r.LoadHTMLGlob("templates/*")// 2. 提供静态文件服务//   /static 对应项目下的 static 目录r.Static("/static", "./static")// 3. 首页路由r.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", nil)})// 启动服务器r.Run(":8080")
}

四、HTML 模板示例

templates/index.html

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>静态资源示例</title><!-- 引入 CSS --><link rel="stylesheet" href="/static/css/style.css">
</head>
<body><h1>欢迎来到 Go 静态资源服务示例</h1><!-- 引入图片 --><img src="/static/images/logo.png" alt="Logo" width="150"><!-- 引入 JS --><script src="/static/js/app.js"></script>
</body>
</html>

五、静态资源示例

static/css/style.css

body {background-color: #f5f5f5;font-family: Arial, sans-serif;text-align: center;
}
h1 {color: #333;
}

static/js/app.js

document.addEventListener("DOMContentLoaded", function() {console.log("JavaScript 已加载");
});

六、运行与访问

运行服务:

go run main.go

在浏览器访问:

http://localhost:8080/

你会看到页面正常加载了 CSS 样式、图片和 JavaScript 脚本。
静态资源也可以直接访问:

http://localhost:8080/static/images/logo.png
http://localhost:8080/static/css/style.css

七、总结

  • • Gin 提供 Static() 方法一行就能完成静态文件托管。
  • • 静态文件路径映射和 URL 前缀可以灵活配置。
  • • 结合 HTML 模板,可以很方便地构建完整的前端页面服务。

http://www.dtcms.com/a/332903.html

相关文章:

  • 迁移学习的常见研究领域(附有相关资料)
  • Kubernetes(2)pod的管理及优化
  • 数据结构初阶(17)排序算法——非比较排序、排序算法总结
  • LintCode第107题-单词拆分-新版
  • 国产操作系统之openEuler:根深叶茂
  • 力扣习题:基本计算器
  • 通过CANopen 配置闭环驱动器C5-E——易格斯igus
  • platform总线注册流程分析
  • CUDA 编程笔记:使用 CUDA 加速数组总和
  • 102、【OS】【Nuttx】【周边】文档构建渲染:安装 Esbonio 服务器
  • 【JavaEE】多线程 -- 死锁问题
  • linux服务器查看某个服务启动,运行的时间
  • 如何将 iPhone 应用程序传输到新 iPhone?
  • C++ rapidjson库使用示例
  • 【慕伏白】CTFHub 技能树学习笔记 -- Web 前置技能之HTTP协议
  • Vue 侦听器(watch 与 watchEffect)全解析3
  • 【ESP32】ESP32-P4 通过 SDIO 连接 ESP32-C6
  • FCC认证三星XR头显加速全球量产,微美全息AI+AR技术引领智能眼镜硬件创新
  • webgis-maps通用地图框架库(leaflet+mapbox)
  • 《探秘浏览器Web Bluetooth API设备发现流程》
  • K8S-Pod资源对象
  • 英语角的恢复重建!
  • 【入门级-算法-6、排序算法:排序的基本概念冒泡排序】
  • uniapp小程序ocr-navigator身份证拍照上传替换方案
  • Rust 入门 集合类型 (十六)
  • 103、【OS】【Nuttx】【周边】文档构建渲染:Sphinx 配置文件
  • Spring 框架中,@EnableScheduling和 @Scheduled详解
  • 【SpringBoot】SpringBoot 中的 Shiro、Spring Security 学习过程及碰到的问题和解决方法
  • Spring Ai 如何配置以及如何搭建
  • SpringBoot系列之从繁琐配置到一键启动之旅