news 2026/5/6 1:56:40

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/5/3 7:45:22

JS逆向 - 某程 w-payload-source 纯算、补环境分析

文章目录概要整体架构流程技术名词解释小结概要 提示:仅供学习,不得用做商业交易,如有侵权请及时联系 也是很久没有更新教学文章了,这次就更新一波纯算和补环境 逆向:某程 header请求头参数 w-payload-source 纯算、补…

作者头像 李华
网站建设 2026/5/1 7:12:25

SQL学习应用工作场景(2)--执行优先级+语法顺序+保留2位小数

前言:我们先看需求,拆解分析思考。然后再实操写SQL。然后分析我中途写的时候遇到的问题以及解决方法,最后在此基础上优化扩展~~~~想看哪个部分的根据目录跳转吧(*^▽^*)一、需求描述:我们需要计算在2025-12-24之后的2条listing的净…

作者头像 李华
网站建设 2026/5/1 0:12:55

Scala 数组

Scala 数组 概述 Scala 是一门多范式编程语言,它结合了面向对象和函数式编程的特性。在 Scala 中,数组是一种基本的数据结构,用于存储一系列有序的元素。本文将详细介绍 Scala 数组的概念、创建方法、操作方法以及一些高级特性。 创建数组 在 Scala 中,数组的创建主要有…

作者头像 李华
网站建设 2026/5/1 15:33:34

MySQL 知识点:函数索引(Functional Index)

MySQL 技术文档:函数索引(Functional Index) 1. 概述 在 MySQL 8.0.13 之前,索引必须关联到表的列或列的前缀。如果查询条件对列使用了函数(如 WHERE UPPER(name) TOM),即使 name 字段有索引…

作者头像 李华
网站建设 2026/5/5 11:52:00

2026年AI产品经理进化论:当“业务直觉”遭遇“技术理性”

展望2026年,AI产品经理这一角色正站在一个关键转折点上。一边是传统产品领域赖以成功的深度用户洞察与敏捷迭代能力,另一边是驱动AI产品的复杂技术逻辑与数据依赖,两者之间正在形成一种深刻的张力。一位资深产品总监曾感慨:“过去…

作者头像 李华