跳转到内容

goctl 命令参考

goctl 是 go-zero 的代码生成 CLI。它可以从 .api.proto 文件生成完整的服务脚手架,也可以生成数据库模型、Docker 镜像、Kubernetes 清单等。

Terminal window
go install github.com/zeromicro/go-zero/tools/goctl@latest
goctl --version

.api 定义文件生成 HTTP 服务脚手架。

从零开始创建新 API 项目:

Terminal window
goctl api new <serviceName>
Terminal window
goctl api new order
cd order && go mod tidy && go run order.go -f etc/order-api.yaml

从已有的 .api 文件生成 Go 代码:

Terminal window
goctl api go [flags]
参数默认值说明
-api.api 文件路径(必填)
-dir.输出根目录
-stylegozero文件命名风格:gozero | go_zero | goZero
-home~/.goctl自定义模板目录
-remote远程 Git 模板 URL
-branch远程模板分支
Terminal window
# 基本用法
goctl api go -api user.api -dir .
# 自定义命名风格
goctl api go -api user.api -dir . -style go_zero
# 使用自定义模板
goctl api go -api user.api -dir . -home ./custom-templates

检查 .api 文件语法是否正确,不生成代码:

Terminal window
goctl api validate -api user.api

就地格式化 .api 文件:

Terminal window
goctl api format -dir .

.api 文件生成 Markdown 文档:

Terminal window
goctl api doc -dir . -o ./docs

.proto 文件生成 gRPC 服务脚手架。

从零开始创建新 RPC 项目:

Terminal window
goctl rpc new <serviceName>

从已有的 .proto 文件生成:

Terminal window
goctl rpc protoc <proto-file> [flags]
参数默认值说明
--go_out.pb.go 文件输出目录(必填)
--go-grpc_out_grpc.pb.go 文件输出目录(必填)
--zrpc_outzRPC 服务代码输出目录(必填)
-mfalse允许一个 proto 文件中定义多个服务
--stylegozero文件命名风格
--home~/.goctl自定义模板目录
--remote远程 Git 模板 URL
--branch远程模板分支
Terminal window
# 标准单服务生成
goctl rpc protoc user.proto \
--go_out=./pb \
--go-grpc_out=./pb \
--zrpc_out=.
# 单文件多服务
goctl rpc protoc multi.proto \
--go_out=./pb \
--go-grpc_out=./pb \
--zrpc_out=. \
-m

生成类型安全、零反射的数据访问代码。

从 SQL DDL 文件生成:

Terminal window
goctl model mysql ddl [flags]
参数默认值说明
-src.sql DDL 文件路径(必填)
-dir输出目录(必填)
-cachefalse生成 Redis 缓存层
-ideafalse抑制进度输出(IDE 集成用)
-stylegozero文件命名风格
-home~/.goctl自定义模板目录
Terminal window
goctl model mysql ddl -src schema.sql -dir ./internal/model
goctl model mysql ddl -src schema.sql -dir ./internal/model -cache

从 MySQL 连接生成:

Terminal window
goctl model mysql datasource [flags]
参数默认值说明
-urlMySQL DSN(必填)
-table逗号分隔的表名,"*" 表示全部
-dir输出目录(必填)
-cachefalse添加 Redis 缓存层
-stylegozero文件命名风格
Terminal window
goctl model mysql datasource \
-url "root:password@tcp(127.0.0.1:3306)/mydb" \
-table "user,order,product" \
-dir ./internal/model \
-cache

从 PostgreSQL 连接生成:

Terminal window
goctl model pg datasource [flags]
参数默认值说明
-urlPostgreSQL DSN(必填)
-table表名
-schemapublicPostgreSQL schema
-dir输出目录(必填)
-cachefalse添加 Redis 缓存层
-stylegozero文件命名风格
Terminal window
goctl model pg datasource \
-url "postgres://root:password@localhost:5432/mydb?sslmode=disable" \
-table "users" \
-dir ./internal/model

生成 MongoDB 模型代码:

Terminal window
goctl model mongo [flags]
参数默认值说明
-type集合文档的 Go 类型名
-dir输出目录
-cachefalse添加 Redis 缓存层
-easyfalse生成更简单的模型接口
-stylegozero文件命名风格
Terminal window
goctl model mongo -type Article -dir ./internal/model -cache

生成优化的多阶段 Dockerfile

Terminal window
goctl docker [flags]
参数默认值说明
-gomain.go 入口路径(必填)
-port8888容器暴露端口
-version1.22-alpineGo 基础镜像版本
-home~/.goctl自定义模板目录
-namespaceKubernetes 命名空间(用于生成标签)
Terminal window
goctl docker -go main.go
goctl docker -go main.go -port 8080 -version 1.22-alpine

生成 Kubernetes Deployment + Service + HPA 清单:

Terminal window
goctl kube deploy [flags]
参数默认值说明
-name服务名(必填)
-namespaceKubernetes 命名空间(必填)
-image容器镜像(必填)
-port服务端口(必填)
-o输出 YAML 文件路径
-minreplicas3HPA 最小副本数
-maxreplicas10HPA 最大副本数
-requestCpu500mCPU request
-requestMem512Mi内存 request
-limitCpu1000mCPU limit
-limitMem1024Mi内存 limit
Terminal window
goctl kube deploy \
-name order-api \
-namespace production \
-image myregistry/order-api:v1.2.0 \
-port 8888 \
-o k8s/order-api.yaml

管理 goctl 的代码生成模板。

子命令说明
goctl template init将默认模板复制到 ~/.goctl/
goctl template clean清除缓存模板
goctl template update强制更新模板至当前 goctl 版本
goctl template revert恢复单个模板为默认值
Terminal window
goctl template init
ls ~/.goctl/api/ # api 模板
ls ~/.goctl/rpc/ # rpc 模板
ls ~/.goctl/model/ # model 模板

检查并自动安装所需工具。

Terminal window
goctl env check [flags]
参数说明
--install自动安装缺失工具
--verbose显示详细输出
Terminal window
goctl env check --install --verbose

输出示例:

goctl version: 1.7.x
go: 1.22.0
protoc: 25.1
protoc-gen-go: 1.33.0
protoc-gen-go-grpc: 1.3.0
goctl-intellij: OK
goctl-vscode: OK

升级 goctl 至最新版本:

Terminal window
goctl upgrade

风格值输出示例
gozerogetuserhandler.go
go_zeroget_user_handler.go
goZerogetUserHandler.go