在上一章节我们介绍通过gf工具链进行文件/目录打包,并生成Go文件编译到可执行文件中。在本章节中,我们介绍资源管理中涉及到的方法,并通过一个打包/解包二进制资源文件的示例,介绍这些方法实现自定义的打包/解包功能。同时,我们也演示了如何通过自定义加解密来保护我们的资源文件内容。
接口文档:
https://godoc.org/github.com/gogf/gf/os/gres
简要介绍:

  1. 通过Pack/Unpack方法可以实现对任意文件的打包/解包功能,可以打包到二进制文件或者Go代码文件。
  2. 资源管理由Resource对象实现,可实现对打包内容的添加,文件的检索查找,以及对目录的遍历等功能。
  3. 资源文件由File对象实现,该文件对象和os.File文件对象类似,并且该对象实现了http.File接口。
  4. ScanDir用于针对于特定目录下的文件/目录检索,并且支持递归检索。
  5. ScanDirFile用于针对于特定目录下的文件检索,并且支持递归检索。
  6. 通过Dump方法在终端打印出Resource资源对象所有的文件列表,资源管理器中的文件分隔符号统一为/。
  7. 此外,gres资源管理模块提供了默认的Resource对象,并通过包方法提供了对该默认对象的操作。

    自定义打包示例

    我们将项目根目录下的public和config目录打包为data.bin二进制文件,并通过gaes加密算法对生成的二进制内容进行加密。 ```bash package main

import ( “github.com/gogf/gf/crypto/gaes” “github.com/gogf/gf/os/gfile” “github.com/gogf/gf/os/gres” )

var ( CryptoKey = []byte(“x76cgqt36i9c863bzmotuf8626dxiwu0”) )

func main() { binContent, err := gres.Pack(“public,config”) if err != nil { panic(err) } binContent, err = gaes.Encrypt(binContent, CryptoKey) if err != nil { panic(err) } if err := gfile.PutBytes(“data.bin”, binContent); err != nil { panic(err) } }

  1. <a name="ZIG63"></a>
  2. # 自定义解包示例
  3. 我们使用将刚才打包生成的data.bin,需要解密和解包两步操作。
  4. ```go
  5. package main
  6. import (
  7. "github.com/gogf/gf/crypto/gaes"
  8. "github.com/gogf/gf/os/gfile"
  9. "github.com/gogf/gf/os/gres"
  10. )
  11. var (
  12. CryptoKey = []byte("x76cgqt36i9c863bzmotuf8626dxiwu0")
  13. )
  14. func main() {
  15. binContent := gfile.GetBytes("data.bin")
  16. binContent, err := gaes.Decrypt(binContent, CryptoKey)
  17. if err != nil {
  18. panic(err)
  19. }
  20. if err := gres.Add(binContent); err != nil {
  21. panic(err)
  22. }
  23. gres.Dump()
  24. }