协议在go源文件上生成导入路径

时间:2019-06-18 10:11:02

标签: go proto

我在$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并执行以下命令:

  

协议--go_out = plugins = grpc:。 a / a.proto

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

构建项目时,它说找不到软件包b。我该怎么办 ?我希望a.pb.go像这样b导入import github.com/cs/p/b。能做到吗?

1 个答案:

答案 0 :(得分:0)

  

非常希望a.pb.go像这样导入b:import 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;
}