protobuf golang import.proto和.pb.proto来自不同目录

protobuf golang import.proto和.pb.proto来自不同目录,go,protocol-buffers,Go,Protocol Buffers,我有一个叫做myProtos的库,看起来像这样 . |-- proto |---- hello.proto | |-- generated └---- hello.pb.go 我在外部有一个名为example.proto的.proto文件,它应该导入hello.proto 因此,文件顶部如下所示: syntax = "proto3"; package example; import "path/to/myProtos/proto/hello.proto" 现在,当我编译example.pro

我有一个叫做myProtos的库,看起来像这样

.
|-- proto
|---- hello.proto
|
|-- generated
└---- hello.pb.go
我在外部有一个名为
example.proto
的.proto文件,它应该导入
hello.proto

因此,文件顶部如下所示:

syntax = "proto3";
package example;
import "path/to/myProtos/proto/hello.proto"
现在,当我编译
example.proto
时,我在
example.pb.go
上得到一个导入错误,因为它有导入行import“path/to/myProtos/proto/hello.pb.go”

我尝试添加两个导入路径,但得到“导入但未使用错误”。我还尝试过进行相对导入,并将两个目录作为标志传递给protoc,这很有效,但我需要go文件中的导入路径为绝对路径

我怎样才能告诉protoc,在运行中的文件路径是不同的


在这种情况下有更好的“最佳实践”吗?

使用
生成的包
hello.proto
文件中

然后,
protoc-I proto/proto/*.proto--go_out=generated
将根据
generated
的包名在
内生成
hello.pb.go
文件夹


proto文件中的包告诉protobuf生成器在生成的文件中使用哪个包

对我有用的是定义
选项go\u package=“github.com//

假设您的文件夹结构如下所述:

.
|-- proto
|---- hello.proto
|
|-- generated
└---- hello.pb.go
在您的情况下,您需要将
选项go\u package=“///生成的”
添加到
hello.proto
。 重要的是你必须跑

protoc-I.--go_out=$GOPATH./*.proto
通常,我会在proto文件旁边生成go文件,以保持proto和go文件的导入路径相同。但这可能是一个口味问题。在这种情况下,您只需将
选项go\u package=“///proto”
设置为
hello.proto

在这两种情况下,
.proto
文件的相对导入现在应解析为在生成的Go代码中正确导入,
.pb.Go
文件也应放入正确的Go软件包文件夹中