命令行工具
cwgo 是 CloudWeGo 提供的用于生成代码的一个命令行工具。目前 cwgo 支持 thrift 和 protobuf 的 IDL,支持生成 MVC Layout、Server、Client 和 DB 的代码。
依赖与运行模式
cwgo 工具并不直接生成代码,而是构造好模板后调用相应工具的生成函数。
cwgo
|
| HTTP server / client
|-----------> hz
| RPC server / client
|-----------> kitex
| DB
------------> gorm/gen
所以相对应工具的注意事项也需要遵守, 如生成 RPC 代码时 kitex 的注意事项和生成 HTTP 代码时 hz 的注意事项。
使用
cwgo 支持交互式命令行和静态命令行两种生成方式。并且弱化了 new 和 update 的概念,更新时直接输入之前的指令即可。
交互式命令行
交互式命令行支持一次调用生成所有代码,如 Server、Client、DB,满足大部分用户的需求,用户只需要根据提示输入信息即可。
语法:cwgo init
执行 cwgo init
后,会首先询问需要生成的项目类型,支持多选,如下图所示,选择了 server 和 client
敲回车后,会依次询问 server 和 client 的信息。步骤如下
-
选择服务类型,RPC 还是 HTTP。单选。
-
输入服务名称。必填。
-
输入 go module 名称。在 GOPATH 外为必填,在 GOPATH 内不需要填。
-
输入 idl 路径。必填。
-
是否使用默认配置去生成项目
- 默认配置:无服务发现组件,无其他参数
- 非默认配置:选择服务发现组件;输入传递给生成工具的参数
client 询问的问题和 server 大致相同,区别是会首先询问生成的 client 的数量,之后循环输入每一个 client 的信息。
db 询问的信息为:
- 选择数据库类型。单选
- 输入数据库 DSN。必填
- 选择是否使用默认配置去生成项目。如选择否,则会要求输入传递给生成工具的参数
对于传递给工具的参数,hz 参考文档,kitex 参考文档。
静态命令行
命令说明
$ cwgo -h
NAME:
cwgo - All in one tools for CloudWeGo
USAGE:
cwgo [global options] command [command options] [arguments...]
COMMANDS:
init 交互式命令行
server 生成 RPC 或者 HTTP Server
client 生成 RPC 或者 HTTP Client
model 生成 DB Model
fallback 回退到 kitex 或者 hz 工具
GLOBAL OPTIONS:
--verbose 打开冗余日志模式
--version, -v 打印工具版本
Server 和 Client 命令
--service 指定服务名称
--type 指定生成类型
--module 指定生成 module 名称
--idl 指定 IDL 文件路径
--out_dir 指定输出路径
--template 指定 layout 模板路径
--registry 指定服务注册组件
--proto_search_path 添加 IDL 搜索路径,只对 pb 生效
--pass value 传递给 hz 和 kitex 的参数
pass 参数说明:
如传递 hz
的 `handler_dir" 参数, 则应输入 –pass “–handler_dir ./handler”
Model 命令
--dsn 指定数据库 DSN
--db_type 指定数据库类型
--out_dir 指定输出文件夹,默认 biz/dao/query
--out_file 指定输出文件名,默认 gen.go
--tables 指定数据库表名称
--unittest 是否生成单测,默认不生成
--only_model 是否只生成 model 代码,默认关闭
--model_pkg 指定 model package 名
--nullable 当字段为 null 时,指定是否生成指针,默认关闭
--signable 是否检测整型列 unsigned 类型来调整生成相应的数据类型,默认不生成
--type_tag 是否给字段生成 gorm column type tag,默认不生成
--index_tag 是否给字段生成 gorm index tag,默认不生成
常用命令
Server
cwgo server --type {{RPC/HTTP}} --idl {{path/to/IDL_file.thrift}} --service {{svc_name}}
Client
cwgo client --type {{RPC/HTTP}} --idl {{path/to/IDL_file.thrift}} --service {{svc_name}}
Model
cwgo model --db_type mysql --dsn "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local"
最后修改
July 13, 2023
: docs: update code example in kitex-generic call (#711) (f80b346)