news 2026/4/19 10:46:53

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/4/19 1:37:49

EHR+AI助手:远程办公模式下HR与IT的合规协同方案

摘要:随着数字经济的深度发展,远程办公已从应急选项升级为企业运营的战略配置,但其带来的跨地域用工、数据流转、流程管控等问题,对HR与IT部门的协同合规提出了严峻挑战。EHR系统作为人力资源数字化的核心载体,与AI助手…

作者头像 李华
网站建设 2026/4/17 16:30:42

《jQuery UI API 文档》

《jQuery UI API 文档》 引言 jQuery UI 是一个基于 jQuery 的用户界面库,它提供了丰富的交互组件和效果,帮助开发者快速构建出具有丰富交互体验的网页应用。本文档将详细介绍 jQuery UI 的 API,包括其组件、方法和事件,旨在帮助开发者更好地理解和运用 jQuery UI。 一、…

作者头像 李华
网站建设 2026/4/15 14:59:49

还在用 Figma 画饼?我用这个平台,把原型上线从 3 天压到 3 分钟

作为一名产品经理,我最怕听到的话就是“这个需求排满了,下周吧”。一个在会议上让所有人兴奋的灵感,在漫长的排期和等待中,逐渐变得平庸和乏味。我曾经以为,这是无法改变的宿命。直到我发现,原来我可以自己…

作者头像 李华
网站建设 2026/4/17 8:40:46

夸克网盘下载不限速_在线解析站

今天教大家一招能解决夸克网盘限制的在线工具。这个工具也是完全免费使用的。下面让大家看看我用这个工具的下载速度咋样。地址获取:放在这里了,可以直接获取 这个速度还是不错的把。对于平常不怎么下载的用户还是很友好的。下面开始今天的教学 输入我给…

作者头像 李华
网站建设 2026/4/17 0:37:38

当“同时发生”成为攻击武器

概述 (Overview) 假设我们正在测试一个在线购物 Web 应用程序的安全性。这时可能会引出许多问题:我们能否用一张 10 美元的礼品卡支付 100 美元的商品?我们能否多次在购物车中应用相同的折扣?答案是:可能!如果系统容易…

作者头像 李华