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

时间:2017-04-23 12:11:18

标签: 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.proto时,我在example.pb.go上遇到导入错误,因为它有导入行导入“path / to / myProtos / proto / hello.pb.go”

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

如何判断protoc在go文件中路径是否不同?

在这种情况下是否有更好的“最佳做法”?

2 个答案:

答案 0 :(得分:0)

对我有用的是定义option go_package = "github.com/<your-account>/<your-cool-project>/<sub-dirs>

让我们假设您具有指定的文件夹结构:

.
|-- proto
|---- hello.proto
|
|-- generated
└---- hello.pb.go

在您的情况下,您可以将option go_package = "<path>/<in>/<GOPATH>/generated"添加到hello.proto中。 重要的是您必须先运行

protoc -I. --go_out=$GOPATH ./*.proto

通常,我会在原型文件旁边生成go文件,以使proto和go文件的导入路径保持相同。但这可能是个问题。在这种情况下,您只需将option go_package = "<path>/<in>/<GOPATH>/proto"设置为hello.proto

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

答案 1 :(得分:-1)

package generated;文件中使用hello.proto

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

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