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.go
、go.mod
和 simple.proto
在同一个文件夹中。 protoc
和 protoc-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 文件,我看到的解决方案是可行的。
我有包含以下内容的简单原型文件。
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.go
、go.mod
和 simple.proto
在同一个文件夹中。 protoc
和 protoc-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 文件,我看到的解决方案是可行的。