@

一、环境相关版本

go             v1.20.5
protoc         v4.24.0
protoc-gen-go  v1.26.0

protoc-gen-go版本过高时需要指定包名,即go_package
 

二、go_package配置为当前目录下

option go_package="/";

 /表示生成的pb.go文件在当前目录下。
 
image-1691671049568

  此时是在demo下执行,所以pb.go文件生成在demo下。
 
 
image-1691671061319

  此时是在demo/api下执行,所以pb.go文件生成在demo/api下。

 

三、go_package配置为指定目录

option go_package="/main";

  指定生成的pb.go文件生成在当前路径下的main文件夹中

 
image-1691671083273

  此时是在demo下执行,所以pb.go文件生成在demo/main下。

 

image-1691671090997

  此时是在demo/api下执行,所以pb.go文件生成在demo/api/main下。
 
 
image-1691671097204

  但是通过go_out的参数 可以指定pb.go生成的层级,如指定了./api,那么此时虽然是在demo层级下执行,但执行的结果在demo/api层级中。

 

四、结论

  所以如果要生成到指定目录下,实际生成的位置是当前位置/go_out位置/go_package位置,如果每次执行的当前位置不一样,记得调整go_out的位置。

 
 
如有不对,烦请指出,感谢!