Golang protobufs的名字有冲突

Golang protobufs的名字有冲突,go,protocol-buffers,grpc,Go,Protocol Buffers,Grpc,我有两个相互通信的服务,它们有单独的协议文件。这两种类型之间有两种常见的消息类型。尝试测试运行时,我得到: 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"

我有两个相互通信的服务,它们有单独的协议文件。这两种类型之间有两种常见的消息类型。尝试测试运行时,我得到:

  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++)。在该域中,实际的文件名并不重要,只有文件中定义的包


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

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

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

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