【go-zero】go-zero架构逐一突破:protobuf 从开始到放弃 1秒生成protocol buffer 文件

发布于:2022-11-09 ⋅ 阅读:(13) ⋅ 点赞:(0) ⋅ 评论:(0)

历史go-zero篇章

1、go-zero架构逐一突破:go-zero 超时 timeout 到底有几处可以设置?你学废了吗
2、go-zero架构逐一突破:goland中的terminal与电脑terminal goctl版本 始终不一致问题



前言

这是根据go-zero在项目实战中,作者发掘的问题与技巧,希望能与所有的gopher一起分享,一起成长,如果文章有错误,也请大家及时指正问题,作者会立刻修改


一、protobuf 从开始到放弃

众所周知,我们每次新创建一个数据库表
就需要将对应的crud的结构体写在protobuf中
这个工作无非是一件无脑而又浪费时间的工作
而且一旦数据类型映射错误还会导致orm生成model与.pb文件中的对应关系发生转化
可以参考这篇文章
【go-zero】go如何优雅地将 mysql 中 decimal 数据类型映射到 protobuf

好下面就开始我们的奇技淫巧吧

1、衷心的劝告

很多刚开始使用go-zero框架的用户
发现在api层返回的数据结构,从开始的标准驼峰,变成了大写首字母的驼峰结构
问题究其原因,其实就是我们在 protobuf中定义的大写
其实在protobuf定义大写并不是像go语言为了共有(public)
墙裂建议:我们定义protobuf的变量都为首字母小写

二、奇技淫巧 sql2pb

1、安装(环境中一次安装即可)

我们需要安装一个go插件
这个也是go-zero的贡献者,七牛云员工做的一个插件
将数据库类型直接映射成protobuf,非常感谢这位作者
大家使用时记得点一个star!!!

go install github.com/Mikaelemmmm/sql2pb@latest

2、查看需要的参数

sql2pb -h

三、丝滑的使用 sql2pb

1、安装(环境中一次安装即可)

参数比较多

sql2pb -go_package ./pb -host 127.0.0.1 -package pb -password 123456 -port 3306 -schema admin_pro -service_name xxxxRpc -user root -table member_order > ./xxxxRpc.proto

上面用到了一些参数 我们挨个说明一下:

-go_package:这里指的是如下图所示的 go_package
在这里插入图片描述
-package:这里指的是如上图所示的 package
-host:数据库链接地址(不要带上端口号)
-password:数据库密码
-port:端口号
-schema:数据库名
-service_name:生成的如下图所示
在这里插入图片描述
-user:数据库用户名
-table:表名,如果需要一次生成多个表,则可以用逗号隔离
./xxxxRpc.proto:生成到当前目录的一个proto文件

2、奇技淫巧

如果我们的proto文件已经有了
当再次执行这个指令则会覆盖所有的proto,就会把我们自己写的给覆盖了
此时该如何处理呢?

我们只需要更改几处,保证可以生成一个新的proto
在这里插入图片描述
我们只需要把新proto的内容粘贴到老的proto里面就可以了,然后删除

需要更改的2个地方
字符串最后:./xxxxRpc.proto
和新生成的表名:-table

总结

这里简单介绍了 sql2pb
希望大家在使用go-zero框架时,可以巧妙准确的使用sql2pb指令
加快我们的开发速度