【问题标题】:Golang protobufs has a name conflict overGolang protobufs 存在名称冲突
【发布时间】:2020-08-24 21:53:32
【问题描述】:

我有两个相互通信的服务,并且有单独的原型文件。两者之间有几种常见的消息类型。当尝试测试运行时,我得到:

  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 protocol-buffers grpc


    【解决方案1】:

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

    您可以真正将 protobuf 视为自己的语言,具有自己的包和命名空间语义(实际上,类似于 C++)。在那个域中,实际的文件名无关紧要,只有文件中定义的包。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2023-02-10
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      相关资源
      最近更新 更多