У меня есть существующий проект в Go, где я использую буферы протокола / gRPC. До недавнего времени опция go_package
была необязательной, и результирующее имя пакета Go совпадало бы с именем прото-пакета.
Этот файл находится в корне проекта. Сгенерированный файл кода (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";
После добавления этой опции в прото-файл и повторного выполнения команды выходные данные попадают в этот путь относительно корня проекта. Что-то вроде:
$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...
Так как же правильно не нарушить макет проекта?