登录
首页 >  Golang >  Go问答

冲突问题:Golang中的protobufs命名问题

来源:stackoverflow

时间:2024-03-29 11:51:27 271浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《冲突问题:Golang中的protobufs命名问题》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我有两个相互通信并具有单独的原型文件的服务。两者之间有一些共同的消息类型。当尝试测试运行时,我得到:

2020/08/24 13:40:42 WARNING: proto: file "delivery.proto" has a name
  conflict over release.Patient     previously from:
 "gitlab.com/dhf0820/roirelease/protobufs/relPB"    currently from: 
 "gitlab.com/dhf0820/roi_delivery/protobufs/delPB"

如您所见,它们有不同的包名称 relpb 和 delpb。患者在这两种服务中使用,我在两者之间编组/解组以发送正确的消息。我不确定这是否是正确的方法。

有没有更好的方法或者发生了什么。我似乎有独特的名字。


解决方案


看起来这些名称在生成的 Go 代码域中是唯一的,但在 protobuf 域中不是唯一的。

您确实可以将 protobuf 视为自己的语言,具有自己的包和命名空间语义(实际上,类似于 C++)。在该域中,实际的文件名并不重要,重要的是文件中定义的包。

您的两个文件可能都有 package release; 位于顶部。这意味着,在 protobuf 世界中, release.Patient 被定义了两次。 protoc 可能仍然能够意外生成工作 Go 代码,但它仍然是一个格式错误的原型定义。如果您尝试在其他语言(例如 C++)中使用相同的定义,或者尝试使用依赖于原型反射的库,您可能不会有同样的运气。如果您尝试将其中一条消息用作另一个文件中的字段,它也可能会中断;它指的是哪个 release.Patient

本篇关于《冲突问题:Golang中的protobufs命名问题》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>