Protoc 在 Go 源文件上生成导入路径



我在$GOPATH/src/github.com/cs/p/a/a.proto中有一个pb文件,在$GOPATH/src/github.com/cs/p/b/b.proto中有一个pb文件。a.proto像这样导入b.proto

import "b/b.proto"

现在我输入 $GOPATH/src/github.com/cs/p 并执行以下命令:

protoc --go_out=plugins=grpc:. a/a.proto

然后我发现a.pb.go是在$GOPATH/src/github.com/cs/p/a/中生成的,其中有这样的语句:import "b"

当我构建项目时,它说它找不到包b。我该怎么办?从字面上看,我希望a.pb.go这样的导入bimport github.com/cs/p/b.能做到吗?

从字面上看,我希望a.pb.go像这样导入b:导入 github.com/cs/p/b。 能做到吗?

是的!

您需要在protoc编译步骤中包含导入路径。因此,假设您的 git 源位于路径 $GOPATH/src 下,您将添加包含标志"-I.:$GOPATH/src"如下所示:

protoc --go_out=plugins=grpc:. "-I.:$GOPATH/src" a/a.proto

导入后,要引用任何消息类型,请使用作用域路径<package name>.<message name>

例如,(git 托管(定义:

// this file resides here: ${GOPATH}/src/github.com/bib/pb/person.proto
package tutorial;
message Person {
  string name = 1;
}

将像这样导入和引用:

import "github.com/bib/pb/person.proto"
message AddressBook {
  repeated tutorial.Person people = 1;
}

最新更新