我们可以通过 gf
命令行工具的 pack
命令实现对任意文件/目录的打包,关于 gf
命令行工具的安装和使用具体请查看 资源打包-pack 章节。由于通过命令行工具进行打包比较简便,因此也是推荐的打包方式。
gf pack
生成 Go
文件
比较推荐的方式是将 Go
文件直接生成到 boot
启动目录,并设置生成 Go
文件的包名为 boot
,这样该资源文件将会被自动引入到项目中。我们将项目的 config,public,template
三个目录的文件打包到 Go
文件,打包命令为:
gf pack config,public,template packed/data.go -n packed
生成的 Go
文件内容类似于:
package packed
import "github.com/gogf/gf/v2/os/gres"
func init() {
if err := gres.Add("H4sIAAAAAAAC/5y8c5Bl0Zbuu9O2bVaq0rZZ6Urbtm3bNnfatipto9"); err != nil {
panic(err)
}
}
可以看到,生成的 Go
文件中通过 gres.Add
方法将资源文件的二进制内容添加到默认的资源管理器中,该方法的参数是压缩过后的BASE64字符串,将会在程序启动的时候做解压并在内存中生成一个文件树对象,便于在运行时快速操作文件。
使用打包的 Go
文件
在 boot
包中优先引入 packed
资源包
在项目的 boot
程序启动设置包中自动引入 packed
资源包,并且应当作为第一个引入的包,以便于其他引入的包在初始化时( init
方法中)便能使用到资源内容,例如像这样( module
名称为 my-app
):
import (
_ "my-app/packed"
// 其他包
)
这里建议引入 packed
包和其他包之间加入一个空行以作区分,特别是 Goland
IDE的 import
插件不会将引入包进行自动排序。
在 main
包中优先引入 boot
包
由于项目的 main
入口程序文件会引入 boot
包,并且应当作为第一个引入的包:
import (
_ "my-app/boot"
// 其他包
)