【go-zero】goctl最新版1.3.4 脚本总结: protobuf脚手架 | orm脚手架 | rpc脚手架 | api脚手架 5分钟打造go微服务

【go-zero】goctl最新版1.3.4 脚本总结: protobuf脚手架 | orm脚手架 | rpc脚手架 | api脚手架 5分钟打造go微服务,第1张

笔者当前版本:
go version go1.18.1 darwin/arm64
goctl version 1.3.4 darwin/arm64

通过这4份脚手架,我们将一个完整的微服务通过数据库表,可以在5分钟创建出来所有基本可用的所有方法
在go-zero官方解释:分页属于客户的业务,所以在go-zero设计之初就没有考虑将分页的orm加入到系统中,后续会和大家分享go-zero使用分页的设计

一、升级goctl 降级goctl

goctl是go-zero微服务框架下的代码生成工具
使用 goctl 可显著提升开发效率,让开发人员将时间重点放在业务开发上
其功能有:

api服务生成rpc服务生成model代码生成模板管理 1、查看当前 goctl 版本号

版本号说明

version:goctl 版本号os:当前 *** 作系统名称arch: 当前系统架构名称
goctl -v                                                                                                                                                              
goctl version 1.3.4 darwin/arm64
2、通过查看帮助 升级goctl
goctl -h


升级 goctl

goctl upgrade
3、 降级 goctl 到指定的版本(如:v1.3.2)
go install github.com/zeromicro/go-zero/tools/[email protected]
二、一键生成 protobuf

这里需要参考开软软件 sql2pb
sql2pb - github :https://github.com/Mikaelemmmm/sql2pb

# 查看需要的参数
sql2pb -h

参数如下:

1、 *** 作指令:
sql2pb -go_package ./pb -host 数据库链接地址 -package pb -password 数据库密码 -port 3306 -schema 数据库名 -service_name 生成的rpc名称(如:workorderrpc,这是在proto中service的命名) -user 账户 -table 表名(可以用逗号隔离,如:table1,table2) > ./workorderrpc.proto (生成的proto的文件名)
三、一键生成 model (orm脚手架)

摘自官方:
goctl model 为go-zero下的工具模块中的组件之一,目前支持识别mysql ddl进行model层代码生成,通过命令行或者idea插件(即将支持)可以有选择地生成带redis cache或者不带redis cache的代码逻辑。

生成的目录结构

  model
  ├── usermodel.go
  ├── usermodel_gen.go
  └── vars.go
1、 *** 作指令(通过datasource生成)
goctl model mysql datasource -url="账户:密码@tcp(数据库连接地址:3306)/数据库名" -table="表名" -dir=./internal/model  --style=goZero
2、重要提示(数据库设计问题)

建议:我们在数据库设计时,将所有字段都设置为不能为空

为什么要这么设计呢?为了更好的和go-zero的orm框架融合

如上图所示
我们如果设计数据库的表字段不为空时,会生成 sql.NullInt64 类似这种的类型,这种类型会影响我们在rpc与api调用之间的便利性

四、一键生成 Rpc 1、 *** 作指令

强调2点:

–style=goZero :可以将我们生成的文件名驼峰sed -i:消除生成的文件中 json含有omitempty类型
goctl rpc protoc workorderrpc.proto(proto文件名) --go_out=. --go-grpc_out=. --zrpc_out=. --style=goZero

sed -i "" 's/,omitempty//g' pb/workorderrpc.pb.go
sed -i "" 's/,omitempty//g' pb/workorderrpc_grpc.pb.go
2、生成目录如下:
.
├── etc
│   └── greet.yaml
├── go.mod
├── go.sum
├── greet
│   ├── greet.go
│   ├── greet.pb.go
│   └── greet_grpc.pb.go
├── greet.go
├── greet.proto
└── internal
    ├── config
    │   └── config.go
    ├── logic
    │   └── pinglogic.go
    ├── server
    │   └── greetserver.go
    └── svc
        └── servicecontext.go
五、一键生成 Api 1、 *** 作指令
goctl api go -api workorderapi.api(api文件名) -dir .  --style=goZero

六、问题处理

这里会持续更新,欢迎小伙伴来补充!!

1、undefined: grpc.WithBalancerName

问题:google.golang.org/grpc v1.46.0 版本过高 goctl跟不上
解决方式:降级为1.45.0及以下

2、protoc-gen-go: unable to determine Go import path for “x”

问题描述如下:

protoc-gen-go: unable to determine Go import path for "xxx.proto"

Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.

报错截图如下:

问题:protobuf中缺少 option 参数
解决:需要在protobuf中加入 option的参数,尽量保持package与opention命名一致

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/990090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存