У меня есть 2 прототипа, скомпилированных под разные пакеты go, но когда я регистрирую их на сервере и запускаю его, я получаю:
panic: proto: file "common.proto" is already registered
previously from: "github.com/soft/test-platform.go/common"
currently from: "github.com/soft/proto-asterix/asterix"
Вот common.proto в репозитории тестовой платформы (в папке /api
):
syntax = "proto3";
package soft.testplatform.common; // here I do defint a UNIQUE package name !
option java_multiple_files = true;
option go_package = "github.com/soft/test-platform.go/common"; // Here I do define a unique go package name !
message MyMessage{
string commandId = 1;
}
Как видите, определение пакета для go_package и package не конфликтует с пакетом с github.com/soft/proto-asterix/asterix. Похожи только имена файлов .proto (common.proto).
Я генерирую файлы go с protoc плагином protoc-gen-go, используя следующую команду:
protoc \
--proto_path=../test-platform/api/ \
--go_out=./common --go_opt=paths=source_relative \
../test-platform/api/common.proto
Согласно документации здесь https://developers.google.com/protocol-buffers/docs/reference/go/faq#fix-namespace-conflict пакет и имя файла должны быть добавлены для проверки наличия конфликта регистрации, но здесь это не так.
Кто-нибудь сталкивался с таким поведением? Я пропустил что-то очевидное для разрешения этого конфликта имени пакета?
Вот что я пробовал:
- Добавление/удаление инструкции
package
в файлcommon.proto
- Измените команду протокола, чтобы использовать абсолютную (а не относительную)
proto_path
Версия Protoc: libprotoc 3.15.7 Версия плагина Protoc go: protoc-gen-go v1.26.0