我想生成。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