资源管理设计的目标之一是在开发阶段不影响静态文件的开发管理,只有在发布的时候执行打包即可,打包完毕后清理临时文件,因此只会影响生成的二进制可执行文件,对开发者来说无感知且使用便捷。
建议大家使用GoFrame官方提供的工程化目录结构,并且使用CLI工具来创建自己的项目工程,因为整个框架工程化思想以及一些示例都是基于标准化的工程目录结构,这样更有利于大家学习和使用整个开发框架,提高开发效率。特别是,在工程目录中存在一个packed目录,用以存放资源管理组件的相关打包内容,在默认情况下,里面是一个空的go文件,什么都不会做。
GoFrame
CLI
packed
go
在开发阶段,一般来说,开发者并不需要关心资源管理的事情,该怎么撸码就怎么撸,静态的文件按照建议放到public目录下。在开发阶段的静态文件访问都会直接通过文件系统访问。
public
当开发完毕后,想要将静态文件、模板文件、配置文件打包到二进制可执行文件中,随着二进制可执行文件发布。好的,这个时候资源组件开始介入展示能力了。您需要配置到交叉编译的配置,具体请参考命令行相关章节 交叉编译-build 。我们需要使用到CLI工具来执行可执行文件编译,将您的编译配置通过配置文件管理起来(放到config.yaml文件中),一个参考的编译配置如下:
config.yaml
gfcli: build: name: "my-application" arch: "amd64" system: "linux" mod: "none" cgo: 0 packSrc: "manifest/config,manifest/i18n,resource/public,resource/template" version: "" output: "./bin" extra: ""
请注意其中的pack配置,表示我们在执行编译的时候自动打包到二进制可执行文件中的目录。随后,我们在项目根目录下执行编译命令:
pack
gf build
该命令在编译时会自动将配置文件中指定的目录进行打包成临时的打包go文件,再执行编译,编译完毕后自动清理临时的打包go文件。
大部分场景下,配置文件可能不需要打包进二进制可执行文件,具体根据您的业务场景自行选择。
将二进制执行发布执行即可。
gf build看起来没有按照cli的配置生效,尤其是i18n的pack。以下是我的配置文件:
# HTTP Server. [server] address = ":8199" serverRoot = "resource/public" serverAgent = "gf-demos" logPath = "E:/go-workspace/MyGoFrame/log/" nameToUriType = 2 routeOverWrite = true openapiPath = "/api.json" swaggerPath = "/swagger" lang = "zh-CN" # 与i18n文件名对应 # Logger configurations. [logger] path = "log/" level = "all" rotateExpire = "1d" # 一天一个回滚 rotateBackupLimit = 1 # 保留7个日志文件 writerColorEnable = true # 日志文件带有颜色 RotateBackupCompress = 9 # 日志文件压缩级别,0-9,9最高 stdout = true Flags = 44 #日期 时:分:秒:毫秒 文件:行号 # Database configurations. [database] link = "mysql:root:mysql@tcp(192.168.212.117:3306)/myapp" debug = true # GF-CLI工具配置 [gfcli] # 自定义DAO生成配置(默认是读取database配置) [[gfcli.gen.dao]] link = "mysql:root:mysql@tcp(192.168.212.117:3306)/myapp" descriptionTag = true noModelComment = true removePrefix = "gf_" [build] name= "my-goframe" arch= "all" system= "all" mod= "none" cgo= 0 pack= "config,i18n,public,template" version= "" output= "./bin" extra= ""
以下是我的目录结构
├───DEBIAN ├───lib │ └───systemd │ └───system └───myapp ├───api ├───internal │ ├───cmd │ ├───consts │ ├───controller │ ├───dao │ ├───errorCode │ ├───model │ │ └───entity │ ├───packed │ └───service │ └───internal │ ├───dao │ │ └───internal │ └───do ├───log ├───manifest │ ├───config │ ├───deploy │ └───docker ├───resource │ ├───doc │ ├───i18n │ │ ├───en │ │ └───zh-CN │ ├───public │ ├───scripts │ └───template ├───test └───utility ├───response └───utils
使用 gf build 生成的二进制文件是main.exe,而不是配置文文件指定的配置项。i18n也没有生效。 为什么呢?
郭大佬看起来有点忙呀! 问题自己搞定了。
build没有生效,是因为配置文件写错了,toml的格式需要这么写
[gfcli] [gfcli.build] name= "my-goframe" arch= "all" system= "all" mod= "none" cgo= 0 pack= "config,i18n,public,template" version= "" output= "./bin" extra= ""
只是还是有疑问:
郭强 期待郭大佬的回复
嗯,是的。
原目录是这个:
manifest/config,manifest/i18n,resource/public,resource/template
打包后目录变成:
config,i18n,public,template
不好使
那你换个姿势:
[gfcli] [gfcli.build] name= "my-goframe" arch= "all" system= "all" mod= "none" cgo= 0 packSrc= "manifest,resource" version= "" output= "./bin" extra= ""
打包之后就可以用了
5 Comments
白夜
gf build看起来没有按照cli的配置生效,尤其是i18n的pack。以下是我的配置文件:
以下是我的目录结构
使用 gf build 生成的二进制文件是main.exe,而不是配置文文件指定的配置项。i18n也没有生效。 为什么呢?
白夜
郭大佬看起来有点忙呀! 问题自己搞定了。
build没有生效,是因为配置文件写错了,toml的格式需要这么写
只是还是有疑问:
郭强 期待郭大佬的回复
郭强
嗯,是的。
yidashi
原目录是这个:
manifest/config,manifest/i18n,resource/public,resource/template
打包后目录变成:
config,i18n,public,template
不好使
白夜
那你换个姿势:
打包之后就可以用了