Golang Go语言中 grpc 服务程序,pb 类型和 gorm model 要定义两套么?
golang grpc 服务用来接受客户端提交数据。
数据类型比较多。
通过 gorm 保存数据。
pb 类型要单独转换为 gorm model 么?
Golang Go语言中 grpc 服务程序,pb 类型和 gorm model 要定义两套么?
需要
更多关于Golang Go语言中 grpc 服务程序,pb 类型和 gorm model 要定义两套么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
dto 和 dao 各一份(二者异构大有可能)
可以利用 IDEA 插件让 ChatGPT 帮你生成样板代码
probobuf 结构自动生成的,要加 gorm model 的 tag 要改 proto 文件重新生成,而且同一个字段在 protobuf 中的类型跟在 gorm model 的类型可能不一样(int, int32, int64, uint, etc),分开定义后期迭代省事,除非预期不用改。
就算不是微服务也是两套吧
手撸一个 pb ,让 ChatGPT 自动生成 DDL 、GORM.
肯定两套呀,po 的数据类型不一定都会在 pb 展示呀
需要两套。可以考虑 copier 库,可以根据字段名,复制两个结构。
两者异构很正常, 但是枚举可以定义在 pb 里。该关联的关联,该分开的分开
pb 里定义个 entity 就可以了
使用工具连接数据库之后就可以生成 pb 和 gorm 两套对应的代码,示例 https://go-sponge.com/ui/micro-service
#8 这个是使用 reflect 实现的,接口中使用性能堪忧。推荐使用 https://github.com/jmattheis/goverter 脚本预生成转换代码,好用、性能高
我使用的场景就是 dao 到 dto ,bench 的速度还行,比 mapstructure 快多了。你说的这个也不错,就是有一点麻烦。
pb 可以用自定义结构体类型 google.protobuf.Struct ,序列化下就行
在 Golang 中开发 gRPC 服务程序时,关于是否需要将 protobuf(pb)类型和 GORM 模型定义为两套,这主要取决于具体的需求和设计考虑。
首先,gRPC 使用 protobuf 定义服务和消息类型,这些类型主要用于序列化和反序列化,以及服务间通信。它们通常关注数据的传输格式和接口定义。
而 GORM 是 Golang 的一个 ORM 库,用于与数据库进行交互。GORM 模型则更多地关注数据库表结构、字段类型以及关系映射。
理论上,pb 类型和 GORM 模型可以共用一套结构体,但这通常需要在结构体中添加一些额外的标签来满足两者的需求。例如,你可以使用 protobuf 的 json
标签来处理 JSON 序列化,同时使用 GORM 的 gorm
标签来定义数据库字段。然而,这种做法可能会使结构体变得复杂,且不易于维护。
在大多数情况下,为了代码的清晰性和可维护性,建议将 pb 类型和 GORM 模型定义为两套。这样可以避免在结构体中混入过多的标签,使代码更加简洁明了。同时,这也使得 gRPC 服务和数据库操作可以更加独立地进行开发和测试。
当然,如果你的项目规模较小,且对性能和可维护性的要求不是特别高,共用一套结构体也是可行的。但在做出决定之前,请务必权衡利弊,确保你的设计能够满足项目的实际需求。