news 2026/2/10 10:49:23

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 5:25:45

微爱帮监狱寄信写信小程序与焦作邮政系统对接技术方案

一、项目背景与目标1.1 合作背景微爱帮监狱寄信写信小程序与焦作市邮政管理局、焦作邮政支局建立战略合作,实现"线上电子化-线下实体化"的监狱信件流转闭环,确保信件安全、合规、可追溯。1.2 技术目标三方系统对接目标: ┌────…

作者头像 李华
网站建设 2026/2/3 20:22:23

数据交易中的数据基础设施与云服务

数据交易中的数据基础设施与云服务 关键词:数据交易、数据基础设施、云服务、数据安全、数据流通 摘要:本文深入探讨了数据交易中数据基础设施与云服务的相关内容。首先介绍了数据交易的背景以及数据基础设施和云服务在其中的重要性,接着详细解释了数据基础设施和云服务的核…

作者头像 李华
网站建设 2026/2/10 9:10:09

2025下半年软考纸质证书领取时间表来啦!

2025年下半年计算机技术与专业技术资格考试纸质证书各地领取时间已出炉!部分地区有领取时间限制,通过考试了的同学们抓紧时间领取~一、各地软考纸质证书领取时间汇总1.上海现场领取时间:12月29日快递邮寄时间:12月22日开始2.重庆现…

作者头像 李华
网站建设 2026/2/3 18:01:14

C156D飞腾加固计算机在国产化计算体系中的应用定位

在国产化计算平台逐步落地的过程中,移动计算设备既需要满足自主可控要求,也需要具备在复杂环境中稳定运行的能力。 C156D飞腾加固计算机,正是在这一应用背景下形成的国产化加固计算设备方案。一、产品定位:面向国产化应用的加固计…

作者头像 李华
网站建设 2026/2/5 9:58:31

KAIST AI团队革命性突破:无需深度估计也能让视频自由变换视角

这项由韩国科学技术院(KAIST)人工智能实验室的金敏晶、金正豪、陈昊英、郑俊河以及朱在乙教授团队完成的研究,于2025年12月18日发表在计算机视觉顶级会议arXiv上,论文编号为arXiv:2512.17040v1。有兴趣深入了解的读者可以通过该编…

作者头像 李华
网站建设 2026/2/9 5:46:32

CRMEB WxJava,微信生态开发外挂来袭!

“CRMEB技术圈大事件”——CRMEB多商户系统Java版接入WxJava,实现微信生态开发升级!🚀 用户体验,丝滑到飞起~ ✅ 快速登录不卡壳:告别登录转圈圈/授权失败,将复杂技术验证流程打包简化,丝滑登录…

作者头像 李华