У меня есть существующий проект в Go, где я использую Protocol buffers / gRP C. До недавнего времени опция go_package
была необязательной, и результирующее имя пакета Go было бы таким же, как имя прототипа пакета.
Этот файл находится в проекте root. Сгенерированный файл кода (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 и повторного выполнения команды выходные данные попадают в этот путь относительно проект root. Что-то вроде:
$GOPATH/src/github.com/<org>/authenticator/github.com/<org>/authenticator/authenticator.pb.go
Я пробовал следующие альтернативы в качестве go_package
имен:
Генерация произошла в правильном месте, но я получил предупреждение:
WARNING: Deprecated use of 'go_package' option without a full import path...
Итак, каков правильный способ без нарушения макета проекта?