go frame资源管理打包失败

最近有个需求,需要使用golang做一个小工具,然后我就想既然是小工具,那就把前后端放在一个二进制文件中。恰好使用的项目架构是go frame,它已经提供了这样的能力,但是没想到碰到了一鼻子灰。。。

1.首先我安装的gf工具的版本为

GoFrame CLI Tool v2.1.0, https://goframe.org
GoFrame Version: cannot find goframe requirement in go.mod
CLI Installed At: D:\Go\gopath\gf.exe
CLI Built Detail:
  Go Version:  go1.17.11
  GF Version:  v2.1.0
  Git Commit:  2022-06-21 21:52:54 3b9e5c71bfd9f19e53dc4754e2170df1c534f0bb
  Build Time:  2022-06-21 22:04:44

2.然后我init的工程,go.mod文件为

go 1.15

require github.com/gogf/gf/v2 v2.0.6

3.然后我就去参考了官方文档

文档中提到只要在配置文件中配置如下参数,然后使用gf build命令打包即可

gfcli:
  build:
    name:      "my-application"
    arch:      "amd64"
    system:    "linux"
    mod:       "none"
    cgo:       0
    pack:      "manifest/config,manifest/i18n,resource/public,resource/template"
    version:   ""
    output:    "./bin"
    extra:     ""

但是我按照操作执行后,怎么都访问不到我添加进去的配置文件

4.使用gf build --debug=true命令

使用gf build --debug=true命令执行编译过程中,发现打印了一条日志

build input: {Meta:{} File: Name:neuedu-cli Version: Arch:amd64 System:linux Output: Path:./temp Extra: Mod:none Cgo:false VarMap:map[] PackSrc: Pa
ckDst:internal/packed/build_pack_data.go ExitWhenError:false}

里面没有打印pack参数,反而打印了PackSrc,然后是没有赋值的状态.那么我需要设置的参数会不是其实是PackSrc

5. 然后我修改配置文件如下

gfcli:
  build:
    name:      "neuedu-cli"
    arch:      "amd64"
    system:    "linux"
    mod:       "none"
    cgo:       0
    PackSrc:   "config"
    extra:     ""

6.可是仍然没有效果

于是我看了前面的几个文档,包括在build的过程中使用了debug打印日志

2022-08-15 15:32:33.381 [DEBU] build input: {Meta:{} File: Name:test-cli Version: Arch:amd64 System:linux Output: Path:./temp Extra: Mod:none Cgo:false VarMap:map[] PackSrc:config Pa
ckDst:internal/packed/build_pack_data.go ExitWhenError:false}
2022-08-15 15:32:33.385 gf pack config internal/packed/build_pack_data.go
2022-08-15 15:32:33.446 done!
2022-08-15 15:32:33.533 [DEBU] git log -1 --format="%cd %H" --date=format:"%Y-%m-%d %H:%M:%S"
2022-08-15 15:32:33.536 start building...
2022-08-15 15:32:33.536 [DEBU] go build -o ./temp/linux_amd64/neuedu-cli -ldflags "-X 'github.com/gogf/gf/v2/os/gbuild.builtInVarStr=eyJidWlsdEdpdCI6IiIsImJ1aWx0VGltZSI6IjIwMjItMDgtMTU
gMTU6MzI6MzMifQ=='" main.go
2022-08-15 15:32:33.539 go build -o ./temp/linux_amd64/neuedu-cli main.go
2022-08-15 15:32:36.141 [DEBU]
2022-08-15 15:32:36.142 done!
2022-08-15 15:32:36.143 remove the automatically generated resource go file: internal/packed/build_pack_data.go

我看到日志中提到了internal/packed/build_pack_data.go这个文件,然后编译后又给删除了,我就想他是不是需要引用这个文件
然后我又在main.go中添加了对这个包的引用

import (
	_ "test_cli/api"
	_ "test_cli/internal/packed"

	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	s := g.Server()
	s.SetPort(8199)
	s.Run()
}

最后终于读取到了配置文件

总结起来就是需要注意两点:

1.需要添加配置文件,但是可能我的版本太高了,官方文档还没有更新,扫描添加文件的路径参数为PackSrc而不是pack
2.可能是我生成工程后调整目录过程中误删了对packed包的引用,当然这个就怪我自己了,没弄明白就修改了初始化的工程。。

最后我想说一句,go frame真的是一个非常强大实用的框架,但是希望文档能跟随正式版本一起发布。也祝愿像go frame的国产框架能发展壮大,有更多的大神参与进来。

posted @ 2022-08-15 15:58  夜洛IT后端技术分享  阅读(348)  评论(0编辑  收藏  举报