0

我一直在使用 protoc 毫无问题地生成 golang gRPC 客户端和服务器代码。由于我有多个使用相同数据类型的 gRPC 服务,我想为这些类型引用 base.proto 而不是复制和粘贴,这是额外的工作,可能会导致不同步问题。

下面是 base.proto 的示例:

syntax = "proto3";
package base;
message Empty {
}
message Label {
   string Key = 1;
   string Value = 2;
}

这是一个特定的 .proto 示例:

syntax = "proto3";
import = "base.proto";
package publisher;
service ClientPublisher {
 rpc Publish(stream base.Label) returns (base.Empty) {}
}

而且,这是我的命令:

protoc -I system-client-go/ system-client-go/client/publisher.proto --go_out=plugins=grpc:system-client-go --proto_path=system-client-go/

无论我尝试什么,它都会抛出这个:

2019/08/01 15:31:31 protoc-gen-go: error:bad Go source code was generated: 273:7: expected type, found '.' (以及另外 10 个错误)对应于以下行: rpc Publish(stream base.Label) returns (base.Empty) {}

有任何想法吗?

4

1 回答 1

0

这种错误通常是因为您的相对路径错误。尝试将特定的 proto 文件放在一个目录中并像这样导入它

import "exampleproject/specific.proto";

如果两个文件都在同一个目录中,则在此线程中解释解决方案 => https://github.com/golang/protobuf/issues/322

基本上,golang 每个目录只允许一个包。所以 protoc-gen-go 将它们视为 2 个独立的库。

于 2019-08-22T16:16:13.573 回答