proto:文件已经注册到不同的包

Ant*_*nin 5 go proto protoc

我在不同的 go 包下编译了 2 个 proto,但是当我在 aa 服务器中注册它们并运行它时,我得到:

panic: proto: file "common.proto" is already registered
    previously from: "github.com/soft/test-platform.go/common"
    currently from:  "github.com/soft/proto-asterix/asterix"
Run Code Online (Sandbox Code Playgroud)

这是测试平台存储库(/api文件夹中)中的common.proto :

syntax = "proto3";
package soft.testplatform.common; // here I do defint a UNIQUE package name !

option java_multiple_files = true;
option go_package = "github.com/soft/test-platform.go/common"; // Here I do define a unique go package name !

message MyMessage{
    string commandId = 1;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,go_package和package的包定义不会与来自 github.com/soft/proto-asterix/asterix 的包发生冲突。只有 .proto 文件名相似(common.proto)。

我使用以下命令生成带有 protoc 和 protoc-gen-go 插件的 go 文件:

protoc \
--proto_path=../test-platform/api/   \
--go_out=./common --go_opt=paths=source_relative \
../test-platform/api/common.proto
Run Code Online (Sandbox Code Playgroud)

根据此处的文档https://developers.google.com/protocol-buffers/docs/reference/go/faq#fix-namespace-conflict应附加包和文件名以检查注册冲突,但似乎没有就是这种情况。

有没有人遇到过这种行为?我是否错过了解决此包名称冲突的明显问题?


这是我尝试过的:

  • 向文件添加/删除package指令common.proto
  • 更改 protoc 命令以使用绝对(而不是相对) proto_path

Protoc 版本:libprotoc 3.15.7 Protoc go 插件版本:protoc-gen-go v1.26.0

Mar*_*her 5

接受的答案不再正确。此提交恢复了“错误修复”,因为它与其他 gRPC 实现不同。

我解决此问题的唯一方法是重命名文件/文件夹。