我在 Go 中有一个现有项目,我正在使用协议缓冲区/gRPC。直到最近,该go_package
选项都是可选的,并且生成的 Go 包名称将与 proto 包名称相同。
该文件位于项目根目录中。生成的代码文件 ( authenticator.pb.go
) 位于同一位置。原型文件:
syntax = "proto3";
package authenticator;
service Authenticator {...}
生成命令指定我要在同一目录中输出:
protoc --go_out=plugins=grpc:. authenticator.proto
今天我拉出了新版本的协议缓冲区编译器和github.com/golang/protobuf/protoc-gen-go
. 第一次运行时收到警告:
WARNING: Missing 'go_package' option in "authenticator.proto",
please specify it with the full Go package path as
a future release of protoc-gen-go will require this be specified.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
建议的链接或多或少没用。但本教程更明确一点:
go_package 选项定义包的导入路径,该路径将包含此文件的所有生成代码。Go 包名称将是导入路径的最后一个路径组件。例如,我们的示例将使用包名“tutorialpb”。
option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";
将此选项添加到 proto 文件并重新运行命令后,输出将在此路径中结束,相对于项目根目录。就像是:
$GOPATH/src/github.com/<org>/authenticator/github.com/<org>/authenticator/authenticator.pb.go
我尝试了以下替代go_package
名称:
.
authenticator
生成发生在正确的位置,但我收到了警告:
WARNING: Deprecated use of 'go_package' option without a full import path...
那么在不破坏项目布局的情况下,正确的做法是什么呢?