protoc-gen-go:无法确定“simple.proto”的 Go 导入路径

srb*_*emr 21 go protocol-buffers protoc

我有包含以下内容的简单原型文件。

\n
syntax="proto3";\n\npackage main;\n\nmessage Person {\n      string name = 1;\n      int32 age = 2; \n}\n
Run Code Online (Sandbox Code Playgroud)\n

我正在尝试使用 protoc 为其生成 go 代码。我跑:

\n
protoc --go_out=. simple.proto\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误:

\n
protoc-gen-go: unable to determine Go import path for "simple.proto"\n\nPlease specify either:\n        \xe2\x80\xa2 a "go_package" option in the .proto source file, or\n        \xe2\x80\xa2 a "M" argument on the command line.\n
Run Code Online (Sandbox Code Playgroud)\n

main.gogo.mod并且simple.proto位于同一文件夹中。和protocprotoc-gen-go在 PATH 环境中定义。

\n

Osc*_*vid 24

Protoc要求指定包,那么解决办法是添加

option go_package = "./your-package-name";
Run Code Online (Sandbox Code Playgroud)

使您的文件如下所示:

syntax="proto3";

package main;

option go_package = "./your-package-name";

message Person {
      string name = 1;
      int32 age = 2; 
}
Run Code Online (Sandbox Code Playgroud)

然后你可以运行命令,例如:

protoc -I src/ --go_out=src/ src/simple/simple.proto
Run Code Online (Sandbox Code Playgroud)

where--go_out=src/指定文件的生成位置,然后指定原始文件的相对路径。

注意:不要忘记在option go_package前面加上前缀./

  • 评论导致编辑队列已满。请添加一个“;” 最后就像: option go_package = "./your-package-name"; (2认同)

Pan*_*udi 17

您忘记通过添加以下内容来链接该文件:

option go_package = "./";
Run Code Online (Sandbox Code Playgroud)

您需要先将其链接列表才能使其工作。这里也是同样的问题


Emr*_*boz 10

你失踪了option go_package.

您指定的名称option go_package将是协议生成的包的名称。通过这样做,您可以导入并访问消息字段。