gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:29:50 97 4
gpt4 key购买 nike

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

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"
这是测试平台存储库中的 common.proto(在 /api 文件夹中):
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 包裹不要与来自 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

  • 协议(protocol)版本:libprotoc 3.15.7
    Protoc go 插件版本:protoc-gen-go v1.26.0

    最佳答案

    感谢@ blackgreen建议,确实,这是由 https://go-review.googlesource.com/c/protobuf/+/301953/ 修复的错误
    虽然 protoc-gen-go 的下一个版本已经发布,但这里是您项目的快速修复:
    使用固定的 protoc-gen-go :

    go install google.golang.org/protobuf/cmd/protoc-gen-go@febffdd
    在您的 go.mod 中更改您的导入匹配
    google.golang.org/protobuf v1.26.1-0.20210525005349-febffdd88e85
    你应该很高兴去!

    关于go - proto:文件已经注册到不同的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67693170/

    97 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com