GoFrame 資源管理-工具打包

2022-04-08 09:21 更新

我們可以通過?gf?命令行工具的?pack?命令實(shí)現(xiàn)對任意文件/目錄的打包。由于通過命令行工具進(jìn)行打包比較簡便,因此也是推薦的打包方式。

gf pack生成Go文件

比較推薦的方式是將Go文件直接生成到?boot?啟動(dòng)目錄,并設(shè)置生成Go文件的包名為?boot?,這樣該資源文件將會(huì)被自動(dòng)引入到項(xiàng)目中。我們將項(xiàng)目的?config?,?public?,?template?三個(gè)目錄的文件打包到Go文件,打包命令為:

gf pack config,public,template packed/data.go -n packed

生成的Go文件內(nèi)容類似于:

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?方法將資源文件的二進(jìn)制內(nèi)容添加到默認(rèn)的資源管理器中,該方法的參數(shù)是壓縮過后的?BASE64?字符串,將會(huì)在程序啟動(dòng)的時(shí)候做解壓并在內(nèi)存中生成一個(gè)文件樹對象,便于在運(yùn)行時(shí)快速操作文件。

使用打包的Go文件

在boot包中優(yōu)先引入packed資源包

在項(xiàng)目的?boot?程序啟動(dòng)設(shè)置包中自動(dòng)引入?packed?資源包,并且應(yīng)當(dāng)作為第一個(gè)引入的包,以便于其他引入的包在初始化時(shí)(?init?方法中)便能使用到資源內(nèi)容,例如像這樣(?module?名稱為?my-app?):

import (
    _ "my-app/packed"

    // 其他包
)

這里建議引入?packed?包和其他包之間加入一個(gè)空行以作區(qū)分,特別是?Goland IDE?的?import?插件不會(huì)將引入包進(jìn)行自動(dòng)排序。

在main包中優(yōu)先引入boot包

由于項(xiàng)目的?main?入口程序文件會(huì)引入?boot?包,并且應(yīng)當(dāng)作為第一個(gè)引入的包:

import (
    _ "my-app/boot"

    // 其他包
)

這里建議引入?boot?包和其他包之間加入一個(gè)空行以作區(qū)分,特別是?Goland IDE?的?import?插件不會(huì)將引入包進(jìn)行自動(dòng)排序。

隨后可以在項(xiàng)目的任何地方使用?gres?模塊來訪問打包的資源文件。

如果使用?GoFrame?推薦的項(xiàng)目目錄結(jié)構(gòu),在目錄結(jié)構(gòu)中會(huì)存在?boot?目錄(對應(yīng)包名也是?boot?),用于程序啟動(dòng)設(shè)置。因此如果將Go文件生成到?boot?目錄下,那么將會(huì)被自動(dòng)編譯進(jìn)可執(zhí)行文件中。

打印資源管理文件列表

可以通過?gres.Dump()?方法打印出當(dāng)前資源管理器中所有的文件列表,輸出內(nèi)容類似于:

2019-09-15T13:36:28+00:00   0.00B config
2019-07-27T07:26:12+00:00   1.34K config/config.toml
2019-09-15T13:36:28+00:00   0.00B public
2019-06-25T17:03:56+00:00   0.00B public/resource
2018-12-04T12:50:16+00:00   0.00B public/resource/css
2018-12-17T12:54:26+00:00   0.00B public/resource/css/document
2018-12-17T12:54:26+00:00   4.20K public/resource/css/document/style.css
2018-08-24T01:46:58+00:00  32.00B public/resource/css/index.css
2019-05-23T03:51:24+00:00   0.00B public/resource/image
2018-08-20T05:02:08+00:00  24.01K public/resource/image/cover.png
2019-05-23T03:51:24+00:00   4.19K public/resource/image/favicon.ico
2018-08-23T01:44:50+00:00   4.19K public/resource/image/gf.ico
2018-12-04T13:04:34+00:00   0.00B public/resource/js
2019-06-27T11:06:12+00:00   0.00B public/resource/js/document
2019-06-27T11:06:12+00:00  11.67K public/resource/js/document/index.js
2019-09-15T13:36:28+00:00   0.00B template
2019-02-02T09:08:56+00:00   0.00B template/document
2018-12-04T12:49:08+00:00   0.00B template/document/include
2018-12-04T12:49:08+00:00 329.00B template/document/include/404.html
2019-03-06T01:52:56+00:00   3.42K template/document/index.html
...

需要注意的是,在使用資源管理器中的資源文件時(shí),需要嚴(yán)格按照其路徑進(jìn)行檢索獲取。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號