go语言 grpc 怎么结合 gorm 使用
项目当中使用多语言开发,所以使用 grpc 作为跨语言调用的工具,但是使用 go 语言时却不知怎么更好的结合 gorm。
主要问题是 proto 生成的 go 结构不适用于 gorm 的 model(proto 生成的结构不支持自定义标签以及 time.Time 类型),而且我认为将网络层数据结构用于持久层也不是一个好主意,因此提出此问是想找到一个合适的方案。
目前我的思路如下:
- 有点啰嗦的写法,在项目中和 proto 中声明两次结构,写一个转换方法,用来转换这两种结构,因为才疏学浅,只能一个字段一个字段赋值,尤其是遇到多条查询,还需要写个循环去转换,如果是这种思路,有没有更高效的转换方式?
- 不使用 gorm,自己写 sql
- 用一个支持 json 数据库来保存
目前搜集到的资料:
这个 问题 问到如何让 proto 支持 go 自定义标签,里面提到了一个库可以支持,不过我还是认为局限性很大,就算 proto 支持了自定义标签,但还是不支持自定义表名,事件等等,所以这个方案 pass
这个 issues 讨论的就是让 proto 支持自定义标签,被明确否定不会被支持。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
第一种方法是最好的也是实践中最实用的。
proto写的多的话,你会发现,proto中 message数据结构定义的会越来越多,所以,针对同一类型的request message,尽量可以定义的大而全,需要哪些字段就给哪些字段赋值,不需要不赋值即可,不赋值的话传输没有任何消费。
还有就是 什么层做什么事情,不要各种耦合,会很乱的。
不要觉得第一种会啰嗦,其实一点都不浪费也不臃肿的。
可以试试protoc-gen-gorm