当前位置: 首页 > 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.jsqmd.com/news/140109/

相关文章:

  • 预训练 vs 微调:打造AI学霸的秘密
  • 5大DeepSeek推广公司测评,助力企业选择优质GEO服务商(2026年1月更新) - 品牌2025
  • 大数据与数字孪生:工业系统仿真优化
  • 豆包AI广告公司推荐(2026年) - 品牌2025
  • JavaScript 变量:let 和 const 该用谁?
  • 阅读笔记11
  • 芒格的“多元思维模型“:提高投资决策的全面性
  • 《数据采集与融合技术实践》综合设计——多源异构数据采集与融合应用综合实践
  • 做DeepSeek推广的公司,哪家比较靠谱?(2026年1月更新) - 品牌2025
  • 《国产数据库技术实践:DM8 从部署到企业级应用的深度探索(附避坑指南与性能调优)》
  • PI-36双麦降噪拾音模块:高清拾音,嘈杂环境克星
  • 程序员的职业生涯:从代码到架构师
  • Nordic典型芯片nRF5340的功能介绍
  • 北京种植义齿价格是多少
  • 在DeepSeek做营销推广,应该联系哪家公司?(2026年1月更新) - 品牌2025
  • 基于GD32的直流无刷电机控制算法实现和验证
  • “十五五”背景下的智慧农机治理,从作业感知到数据驱动的农业装备升级路径
  • 基于SpringBoot+Vue的健身管理系统(源码+lw+部署文档+讲解等)
  • Python机器学习入门(Scikit-learn)教程:从环境搭建到实战建模
  • 如何评估GEO公司的服务能力?2026优质GEO服务商推荐 - 品牌2025
  • 如何选择适合自己企业的GEO公司?(2026年1月更新) - 品牌2025
  • 2026年哪家AI公司的DeepSeek推广做的好? - 品牌2025
  • 文生图:AI 是怎么把文字变成画的?
  • Day41:四轴飞行器控制系统 (基础)
  • 深圳排针排母连接器生产厂家:技术与产业的深度解析
  • 基于SpringBoot的戏曲学习管理系统的设计与实现毕业设计项目源码
  • Win10 系统备份与还原实用指南:3 种方法筑牢数据安全防线
  • 委托构造函数和继承构造函数
  • 推荐几家好点的DeepSeek推广公司(2026年更新) - 品牌2025
  • 2026年主流DeepSeek推广公司大全 - 品牌2025