proto:文件已经注册到不同的包
我在不同的 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"
这是测试平台存储库(/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;
}
如您所见,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
根据此处的文档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