我有一个名为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文件中路径是否不同?
在这种情况下是否有更好的“最佳做法”?
答案 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生成器在生成的文件中使用哪个包。