基本介绍
资源管理
是指可以将任意文件/目录打包为 Golang
源码文件,并且编译到可执行文件中,随着可执行文件发布。
资源文件在程序启动时将会自解压释放到内存中,供程序只读访问,可以将它当做基于内存的文件管理器。同时, GF
的资源管理特性也支持将文件/目录打包为独立的二进制资源文件使用。由于资源文件在程序运行时是基于内存的文件操作,没有磁盘 IO
的开销,因此其文件操作效率非常高。
资源管理特性由 gres
模块实现,该模块具有以下特点:
- 可将任意的文件/目录打包为
Go
文件,支持自定义加解密; - 打包的
Go
文件/资源文件自动压缩,常见css/js
等文件可达到50~90%
的压缩率; - 资源管理器内容完全基于内存,并且内容只读,无法动态修改;
- 资源管理器默认整合支持到了
WebServer
、配置管理、模板引擎模块中; - 任意文件如网站静态文件、配置文件等可编译到二进制文件中,也可编译到发布的可执行文件中;
- 开发者可只需编译发布一个可执行文件,除了方便了软件分发,也为保护软件知识产权内容提供了可能;
使用方式:
import "github.com/gogf/gf/os/gres"
接口文档:
https://godoc.org/github.com/gogf/gf/os/gres
与 embed.FS
的比较
从 Golang v1.16
版本开始官方提供了静态文件嵌入的 embed.FS
特性,整体底层设计和 gres
组件类似,压缩比、执行效率也差不多。只是在使用设计和工程化管理上有比较大的差别。框架的核心组件已经完全对接了 gres
资源管理组件,并且在 GoFrame
提供的标准的工程化管理下能够做到对开发者无感知地使用资源管理特性,具体可以参考章节 资源管理-最佳实践 。未来 GoFrame
基础框架底层不会考虑内置对 embed.FS
组件的支持, embed.FS
与 gres
组件可以独立使用互不影响。