跳到主要内容
版本:2.10.x(Latest)

基本介绍

资源管理 是指可以将任意文件/目录打包为 Golang 源码文件,并且编译到可执行文件中,随着可执行文件发布。

资源文件在程序启动时将会自解压释放到内存中,供程序只读访问,可以将它当做基于内存的文件管理器。同时, GoFrame 的资源管理特性也支持将文件/目录打包为独立的二进制资源文件使用。由于资源文件在程序运行时是基于内存的文件操作,没有磁盘 IO 的开销,因此其文件操作效率非常高。

使用方式

import "github.com/gogf/gf/v2/os/gres"

接口文档

https://pkg.go.dev/github.com/gogf/gf/v2/os/gres

组件特性

gres 资源管理组件具有以下显著特点:

  1. 可将任意的文件/目录打包为 Go 文件,支持自定义加解密。
  2. 打包的 Go 文件/资源文件自动压缩,常见 css/js 等文件可达到 50~90% 的压缩率。
  3. 支持对打包为 Go 文件的资源内容,方便地导出到本地文件系统。
  4. 资源管理器内容完全基于内存,并且内容只读,无法动态修改。
  5. 资源管理器默认整合支持到了 WebServer、配置管理、模板引擎模块中。
  6. 任意文件如网站静态文件、配置文件等可编译到二进制文件中,也可编译到发布的可执行文件中。
  7. 开发者可只需编译发布一个可执行文件,除了方便了软件分发,也为保护软件知识产权内容提供了可能。

embed.FS 的比较

Golang v1.16 版本开始官方提供了静态文件嵌入的 embed.FS 特性,整体底层设计和 gres 组件类似,压缩比、执行效率也差不多,只是在使用设计和工程化管理上有比较大的差别。 GoFrame 资源管理组件的功能更加丰富,框架的核心组件已经完全对接了 gres 资源管理组件,并且在 GoFrame 提供的标准的工程化管理下能够做到对开发者无感知地使用资源管理特性,具体可以参考章节 资源管理-最佳实践

未来 GoFrame 基础框架底层不会考虑内置对 embed.FS 组件的支持, embed.FSgres 组件可以独立使用互不影响。

相关文档

📄️ 资源管理-工具打包

详细介绍如何使用`GoFrame`框架的`gf`命令行工具进行资源文件打包。通过`gf pack`命令可将项目的`config`、`public`、`template`等目录打包成`Go`文件,生成的文件会通过`gres.Add`方法将压缩后的`BASE64`字符串资源添加到默认资源管理器。详细讲解在`boot`包中引入`packed`资源包的正确顺序,以及在`main`包中引入`boot`包的方式。提供了`gres.Dump()`方法来打印资源文件列表以便验证打包结果。

📄️ 资源管理-方法打包

详细讲解如何通过`GoFrame`框架资源管理组件的方法实现自定义文件打包和解包功能。介绍`Pack*`和`Unpack*`方法可将文件打包为二进制文件或`Go`代码文件。讲解`Resource`对象实现资源管理、`File`对象实现文件操作、`ScanDir`和`ScanDirFile`方法实现目录扫描。通过完整示例演示如何自定义打包目录到加密的二进制文件,以及如何解密和解包资源文件,展示了使用`gaes`加密算法保护资源内容的实现方法。

📄️ 资源管理-方法介绍

全面介绍`GoFrame`框架资源管理组件`gres`的常用方法。详细讲解`Add`方法用于添加压缩内容到资源对象,`Load`方法用于加载文件数据,`Get`方法返回指定路径文件,`GetWithIndex`用于目录索引文件搜索(适用于`HTTP`静态服务),`GetContent`直接返回文件内容,`Contains`检查资源是否存在,`ScanDir`等方法用于扫描目录中的文件。每个方法都提供了完整的函数签名和实际代码示例,帮助开发者掌握资源管理操作。

📄️ 资源管理-使用示例

通过完整示例展示`GoFrame`框架资源管理组件在实际项目中的应用。演示了资源管理在`WebServer`的静态服务、配置管理和模板引擎中的集成使用。展示资源文件的组织结构和打包方式,包括配置文件`config.toml`、静态资源`index.html`和模板文件`index.tpl`。通过简单的`import`引入就能实现资源文件的自动加载,无需对代码做额外设置,充分体现`GoFrame`资源管理的便捷性。

📄️ 资源管理-最佳实践

详细介绍`GoFrame`框架资源管理的最佳实践流程。资源管理设计目标是在开发阶段不影响静态文件的开发,仅在发布时执行打包。推荐使用官方提供的工程化目录结构和`CLI`工具创建项目,利用`packed`目录存放打包内容。开发阶段直接通过文件系统访问静态文件。发布时通过配置`hack/config.yaml`中的`packSrc`选项指定需要打包的目录,使用`gf build`命令自动打包并编译。打包完成后自动清理临时文件,对开发者无感知且使用便捷。