protobuf golang import.proto和.pb.proto来自不同目录
我有一个叫做myProtos的库,看起来像这样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
.
|-- 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软件包文件夹中