尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Gin框架基础篇005_静态文件服务

Gin框架基础篇005_静态文件服务
📅 发布时间:2026/6/20 15:39:30

Web应用通常需要提供静态资源,如CSS、JavaScript、图片等。Gin框架提供了多种方法来处理静态文件。

1. 静态文件服务方法

Gin提供了以下静态文件服务方法:

  • Static():提供静态文件服务
  • StaticFile():提供单个静态文件服务
  • StaticFS(): 提供静态文件服务(自定义文件系统)
  • StaticFileFS():提供单个静态文件服务(自定义文件系统)

2. 静态文件服务

Static()方法用于从指定的文件系统根目录提供静态文件服务。

源码:

func(group*RouterGroup)Static(relativePath,rootstring)IRoutes{returngroup.StaticFS(relativePath,Dir(root,false))}
  • relativePath 参数用于指定路由的路径。
  • root 参数用于指定文件系统的根目录。

项目示例:

  • project目录

    • static

      • css

        • index.css

          body{background-color:#fafafa;font-family:'Open Sans',sans-serif;font-size:16px;line-height:1.5;}
      • js

        • index.js

          functiongetDate(){returnnewDate().toISOString().slice(0,10)}
    • main.go

      funcmain(){// 创建路由r:=gin.Default()// 静态文件服务r.Static("/static","./static")// 启动服务(默认端口8080)err:=r.Run()iferr!=nil{return}}

测试:

  • 访问http://127.0.0.1:8080/static/css/index.css

    body{background-color:#fafafa;font-family:'Open Sans',sans-serif;font-size:16px;line-height:1.5;}
  • 访问http://127.0.0.1:8080/static/js/index.js

    functiongetDate(){returnnewDate().toISOString().slice(0,10)}

3. 单个静态文件服务

StaticFile方法用于注册单个路由,为指定的单个本地文件提供服务。

源码:

func(group*RouterGroup)StaticFile(relativePath,filepathstring)IRoutes{returngroup.staticFileHandler(relativePath,func(c*Context){c.File(filepath)})}
  • relativePath 参数用于指定路由路径。
  • filepath 参数用于指定单个文件的路径。

项目示例:

  • project目录

    • static

      • css

        • index.css

          body{background-color:#fafafa;font-family:'Open Sans',sans-serif;font-size:16px;line-height:1.5;}
      • js

        • index.js

          functiongetDate(){returnnewDate().toISOString().slice(0,10)}
    • main.go

      funcmain(){// 创建路由r:=gin.Default()// 单个静态文件服务r.StaticFile("/static/css/index.css","./static/css/index.css")// 单个静态文件服务r.StaticFile("/static/js/index.js","./static/js/index.js")// 启动服务(默认端口8080)err:=r.Run()iferr!=nil{return}}

测试:

  • 访问http://127.0.0.1:8080/static/css/index.css

    body{background-color:#fafafa;font-family:'Open Sans',sans-serif;font-size:16px;line-height:1.5;}
  • 访问http://127.0.0.1:8080/static/js/index.js

    functiongetDate(){returnnewDate().toISOString().slice(0,10)}

4. 自定义文件系统的静态文件服务

StaticFS、StaticFileFS方法与前面介绍的两个方法类似,但是增加了一个fs http.FileSystem参数,用于指定使用的文件系统。

gin默认使用gin.Dir()

源码:

// StaticFS 自定义文件系统的静态文件服务func(group*RouterGroup)StaticFS(relativePathstring,fs http.FileSystem)IRoutes{ifstrings.Contains(relativePath,":")||strings.Contains(relativePath,"*"){panic("URL parameters can not be used when serving a static folder")}handler:=group.createStaticHandler(relativePath,fs)urlPattern:=path.Join(relativePath,"/*filepath")// Register GET and HEAD handlersgroup.GET(urlPattern,handler)group.HEAD(urlPattern,handler)returngroup.returnObj()}// StaticFileFS 自定义文件系统的单个静态文件服务func(group*RouterGroup)StaticFileFS(relativePath,filepathstring,fs http.FileSystem)IRoutes{returngroup.staticFileHandler(relativePath,func(c*Context){c.FileFromFS(filepath,fs)})}

对应前面的项目示例,使用这两个方法的go代码如下:

  • 使用StaticFS

    funcmain(){// 创建路由r:=router.NewHttpRouter()// 指定文件系统的静态文件服务r.StaticFS("/static",http.Dir("./font/static"))// 启动服务(默认端口8080)err:=r.Run()iferr!=nil{return}}
  • 使用StaticFileFS

    funcmain(){// 创建路由r:=router.NewHttpRouter()// 指定文件系统的单个静态文件服务r.StaticFileFS("/static/css/index.css","index.css",http.Dir("./font/static/css"))// 指定文件系统的单个静态文件服务r.StaticFileFS("/static/js/index.js","index.js",http.Dir("./font/static/js"))// 启动服务(默认端口8080)err:=r.Run()iferr!=nil{return}}

相关新闻

  • 阅读笔记11
  • JavaScript 变量:let 和 const 该用谁?
  • 芒格的“多元思维模型“:提高投资决策的全面性

最新新闻

  • 2026年6月劳力士官方售后维修服务中心|全国官方统一咨询电话,各门店详细地址查询 - 速递信息
  • 量化与应对AI绘画文化偏见:从评估到VAOP策略实践
  • 踩坑预警!沙坪坝教资考生择校查看真实学员评价 - 晚香时候
  • 道路运输许可证丢了登报怎么线上办理?正规办理渠道与流程 - 速递信息
  • Claude Opus 4.7深度解析:长上下文、自主检查与多模态语义编织
  • 嵌入式GUI开发实战:Alpha混合与位图绘制优化指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号