使用protoc生成golang代码时导入和使用其他.proto文件时出错

时间:2019-08-01 22:33:45

标签: go protocol-buffers protoc grpc-go

我一直在使用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:错误:错误生成了源代码:273:7:预期的类型,找到了'。' (还有10个错误)   对应于以下行:   rpc Publish(stream base.Label)返回(base.Empty){}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这种错误通常是因为您的相对路径错误。尝试将特定的原始文件放在目录中,然后像导入

import "exampleproject/specific.proto";

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

基本上,golang每个目录只允许一个软件包。因此,protoc-gen-go正在将它们视为2个独立的库。

希望有帮助!