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

protoc-gen-go: unable to determine Go import path for "simple.proto"

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

syntax="proto3";

package main;

message Person {
      string name = 1;
      int32 age = 2; 
}

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

protoc --go_out=. simple.proto

我收到以下错误:

protoc-gen-go: unable to determine Go import path for "simple.proto"

Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.

main.gogo.modsimple.proto 在同一个文件夹中。 protocprotoc-gen-go 都在 PATH 环境中定义。

您忘记通过添加链接列表文件:

option go_package = "./";

您需要先将其链接列表以使其工作。是一样的

首先确保你正确安装了编译器

sudo apt install protobuf-compiler
sudo apt install golang-goprotobuf-dev

使用这个命令

protoc -I=src/ --go_out=src/ src/simple.proto

-I = IPATH -指定搜索导入的目录
--go_out=输出目录

你不见了option go_package.

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

protoc要求指定包,那么解决方法就是添加

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

使您的文件如下所示:

syntax="proto3";

package main;

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

message Person {
      string name = 1;
      int32 age = 2; 
}

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

protoc -I src/ --go_out=src/ src/simple/simple.proto

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

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

我也有类似的问题。

我认为协议缓冲区应该是语言中立的。如果我们将 go_package 添加到 proto 文件,那么如果我们尝试将这些 proto 文件编译成不同的语言,我们将不得不对文件进行更改。

如果您只想生成 go 文件,我看到的解决方案是可行的。