笔者当前版本:
go version go1.18.1 darwin/arm64
goctl version 1.3.4 darwin/arm64
通过这4份脚手架,我们将一个完整的微服务通过数据库表,可以在5分钟创建出来所有基本可用的所有方法
在go-zero官方解释:分页属于客户的业务,所以在go-zero设计之初就没有考虑将分页的orm加入到系统中,后续会和大家分享go-zero使用分页的设计
goctl是go-zero微服务框架下的代码生成工具
使用 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/goctl@v1.3.2
二、一键生成 protobuf
这里需要参考开软软件 sql2pb
sql2pb - github :https://github.com/Mikaelemmmm/sql2pb
# 查看需要的参数
sql2pb -h
参数如下:
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调用之间的便利性
强调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及以下
问题描述如下:
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命名一致
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)