gcmd 命令行与 gf-cli 工具链
结论:gf-cli 是开发期命令行工具(init/run/build/gen 等),gcmd 是运行时命令行组件:工程由 main.go → cmd.Main.Run() 启动,gcmd.Command 描述子命令与参数;借助子命令可让同一二进制启动不同进程(http、定时任务等)。
一、gf-cli 常用命令
| 命令 | 用途 |
|---|---|
| gf init | 创建官方目录规范工程 |
| gf run | 带热编译运行,便于开发 |
| gf build | 编译打包 |
| gf gen dao / service / enum | 代码生成 |
| gf pack | 资源打包(gres) |
| gf docker / k8s | 部署辅助 |
| gf upgrade / env / install | 工具链自管理 |
二、gcmd 运行时组件
- 入口约定:main.go 调用 cmd.Main.Run(gctx.GetInitCtx()),命令定义集中在 internal/cmd。
- Command:Name/Brief/Arguments/Func 等字段;Func 形如 func(ctx, *gcmd.Parser) error。
- 参数获取:命令行 flag/参数经 Parser 解析,配合 gcmd.GetOpt 等读取(API 以官方文档为准)。
代码示例
// internal/cmd/cmd.go
type cMain struct{}
var Main = gcmd.Command{
Name: "main",
Brief: "启动 HTTP 服务",
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
g.Server().Run()
return nil
},
}
// main.go
func main() {
cmd.Main.Run(gctx.GetInitCtx())
}
常见追问 / 记忆点
- 追问:gf run 与 go run 的区别?→ gf run 提供文件监听热编译,开发体验更好;生产用 gf build 产物。
- 追问:一个二进制如何启动多种进程?→ 注册多个子命令(main / job / migrate 等),按参数选择入口。
- 记忆点:开发期靠 gf-cli,运行期靠 gcmd;入口都在 cmd 包,“main 只管 Run”。