grpc 服务程序, pb 类型和 gorm model 要定义两套么?

2024-07-14 10:16:35 +08:00
 ic3z
golang grpc 服务用来接受客户端提交数据。
数据类型比较多。
通过 gorm 保存数据。
pb 类型要单独转换为 gorm model 么?
2609 次点击
所在节点    Go 编程语言
14 条回复
ilylx2008
2024-07-14 10:18:05 +08:00
需要
ck65
2024-07-14 10:37:43 +08:00
dto 和 dao 各一份(二者异构大有可能)
zjh7890
2024-07-14 10:38:27 +08:00
可以利用 IDEA 插件让 ChatGPT 帮你生成样板代码
smalnote
2024-07-14 14:01:29 +08:00
probobuf 结构自动生成的,要加 gorm model 的 tag 要改 proto 文件重新生成,而且同一个字段在 protobuf 中的类型跟在 gorm model 的类型可能不一样(int, int32, int64, uint, etc),分开定义后期迭代省事,除非预期不用改。
ninjashixuan
2024-07-14 15:36:31 +08:00
就算不是微服务也是两套吧
dobelee
2024-07-14 16:55:56 +08:00
手撸一个 pb ,让 ChatGPT 自动生成 DDL 、GORM.
caicaiwoshishui
2024-07-14 17:03:17 +08:00
肯定两套呀,po 的数据类型不一定都会在 pb 展示呀
zzhaolei
2024-07-14 19:10:38 +08:00
需要两套。可以考虑 copier 库,可以根据字段名,复制两个结构。
wenyuhe
2024-07-14 20:59:19 +08:00
两者异构很正常, 但是枚举可以定义在 pb 里。该关联的关联,该分开的分开
wenyuhe
2024-07-14 21:01:07 +08:00
@wenyuhe pb 里定义个 entity 就可以了
gvison
2024-07-15 09:11:35 +08:00
使用工具连接数据库之后就可以生成 pb 和 gorm 两套对应的代码,示例 https://go-sponge.com/ui/micro-service
ryalu
2024-07-15 09:22:19 +08:00
@zzhaolei #8 这个是使用 reflect 实现的,接口中使用性能堪忧。推荐使用 https://github.com/jmattheis/goverter 脚本预生成转换代码,好用、性能高
zzhaolei
2024-07-15 09:28:36 +08:00
@ryalu 我使用的场景就是 dao 到 dto ,bench 的速度还行,比 mapstructure 快多了。你说的这个也不错,就是有一点麻烦。
loux
2024-07-15 09:59:33 +08:00
pb 可以用自定义结构体类型 google.protobuf.Struct ,序列化下就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1057151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX