对于一个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的相关知识,请关注编程网公众号!