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

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

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. 自定义文件系统的静态文件服务

StaticFSStaticFileFS方法与前面介绍的两个方法类似,但是增加了一个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}}
http://www.rkmt.cn/news/154248.html

相关文章:

  • 阅读笔记11
  • JavaScript 变量:let 和 const 该用谁?
  • 芒格的“多元思维模型“:提高投资决策的全面性
  • 做DeepSeek推广的公司,哪家比较靠谱?(2026年1月更新) - 品牌2025
  • 《数据采集与融合技术实践》综合设计——多源异构数据采集与融合应用综合实践
  • 北京种植义齿价格是多少
  • Python机器学习入门(Scikit-learn)教程:从环境搭建到实战建模
  • 2026年哪家AI公司的DeepSeek推广做的好? - 品牌2025
  • 文生图:AI 是怎么把文字变成画的?
  • 基于SpringBoot的戏曲学习管理系统的设计与实现毕业设计项目源码
  • 深圳排针排母连接器生产厂家:技术与产业的深度解析
  • Win10 系统备份与还原实用指南:3 种方法筑牢数据安全防线
  • 2026年主流DeepSeek推广公司大全 - 品牌2025
  • 推荐几家好点的DeepSeek推广公司(2026年更新) - 品牌2025
  • nullptr用法
  • 任正非在位于上海的华为练秋湖研发中心与ICPC全球优胜者及教练座谈 : 关于 AI 和 技术的未来
  • 《AI 应用架构师秘籍:利用 AI 优化生产计划的高级技巧》
  • 微爱帮监狱写信寄信小程序针对互联网黑灰产攻击防护体系
  • 微爱帮监狱写信寄信小程序与中国邮政焦作支局战略合作技术方案
  • 五、特征值和特征向量
  • 接口调不通的情况
  • 科研绘图 | PSO-LSTM粒子群优化长短期记忆神经网络模型结构图
  • GCC -fhardened 面向生产构建的安全加固落地指南
  • ASP.NET Core 依赖注入的三种服务生命周期
  • 一文读懂供应链、采购、运输、分销、配送的区别与协作逻辑
  • EHR+AI助手:远程办公模式下HR与IT的合规协同方案
  • 数据库运维基础从环境搭建到故障处理实战
  • 2025最新!9个AI论文平台测评:本科生毕业论文写作全攻略
  • 基于TCP/IP 通信,服务端主动召测客户端:高并发、高可用任务缓存队列框架设计(第三章)
  • 日总结 45