文件不在使用proto_path指定的任何路径内

Cub*_*Mew 5 go protocol-buffers

我正在测试从另一个目录导入.proto文件。

$ GOPATH / src / A / A.proto

syntax = "proto3"; 
package A;
 message SomeMsg {
     string  msg = 2;
     int64   id  = 3;
 }
Run Code Online (Sandbox Code Playgroud)

$ GOPATH / src / B / B.proto

syntax = "proto3"; 
package B; import "A/A.proto";
 message Msg {
     SomeMsg s = 1;
 }
Run Code Online (Sandbox Code Playgroud)

我正在这样做:在文件夹A中:

protoc A.proto --go_out=.
Run Code Online (Sandbox Code Playgroud)

然后在文件夹B中:

protoc B.proto --go_out=. --proto_path=$GOPATH/
Run Code Online (Sandbox Code Playgroud)

但是我会得到这个错误:

B.proto:文件不位于使用--proto_path(或-I)指定的任何路径内。您必须指定包含此文件的--proto_path。请注意,proto_path必须是.proto文件名的精确前缀-protoc太笨拙,无法找出两个路径(例如绝对路径和相对路径)是否相等(这比您想象的要难得多)。

Pop*_*dic 8

错误对我来说似乎足够清楚,它表明您需要指定B.proto所在的确切目录

protoc B.proto --go_out=. --proto_path=$GOPATH/src/B 
Run Code Online (Sandbox Code Playgroud)

或者如果您已经在文件夹B中,

protoc B.proto --go_out=.
Run Code Online (Sandbox Code Playgroud)

  • “这比你想象的要难”----他们当然很有趣!当我自己第一次读到它时,我笑了起来。 (3认同)
  • 这很令人困惑,因为措辞非常奇怪,使用被动语态,并且“包含”一词实际上意味着文件本身之上的*任何*目录。更短更清晰的是“B.proto not find. Provide the path to .proto files using --proto_path” (2认同)