protobuf与Go不能编译到所需的文件夹路径=source_relative



我想生成。pb。go文件到./pb文件夹。我有我的。proto文件在./proto文件夹下。我在根目录下运行了这个命令:

protoc --go_out=./pb/ --go_opt=paths=source_relative ./proto/*.proto

然而,我的。go文件总是在./pb/proto而不是./pb文件夹下结束,像这样:

.
|____pb
| |____proto
| | |____my_message_one.pb.go
| | |____my_message_two.pb.go
| | |____my_message_three.pb.go

我的模块在go.mod的名称是module grpc_tutorial,这里是一个例子,我的。proto文件:

syntax = "proto3";
option go_package="./grpc_tutorial/pb"; 
message Screen {
string some_message = 1;
string some_message_two = 2;
bool some_bool = 3;
}

我的命令或原型文件有什么问题吗?

直接删除--go_opt=paths=source_relative

如果您希望生成的文件以./pb结尾,那么选项--go_out=./pb/已经指定了正确的输出。

通过添加source_relative,输出反映了源文件夹(documentation)中文件的配置:

如果指定了paths=source_relative标志,则输出文件与输入文件放在相同的相对目录中。. 例如,输入文件protos/buzz。Proto在protos/buzz.pb.go处生成一个输出文件。

由于源文件位于./proto文件夹内,与source_relative输出文件也结束在./proto文件夹内。

整个输出依次在指定的--go_out标志处结束,即在./pb下。这就是为什么最终生成的文件的路径看起来像./pb/proto/my_message_one.pb.go,如您所示。

通过删除source_relative选项,输出不再相对于源文件夹,而是直接进入./pb

在这种情况下,您想要的命令只是:

protoc --go_out=./pb/ ./proto/*.proto

最新更新