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”。
笔记加载中…