У меня есть один protobuf, который генерирует код C # и Go.
Protobuf содержит:
syntax = "proto3";
package myprotobuf;
option go_package = "gitlab.example.com/mycompany/myprotobuf.git";
Я использую go-micro и protoc-gen-micro для моего Go GRPC.Я использую модули Go для своих пакетов Go.Я помещаю сгенерированный код Go в мой репозиторий protobuf по нескольким причинам: (a) подмодулям Git может быть трудно работать с (b) protobuf, ссылающийся на тип во внешнем пакете, требует, чтобы внешний пакет имел определенный абсолютный URL-адрес пакетаи (c) это то, как Google это делает (см., например, structpb ), поэтому кажется, что это «стандарт».
Сервер / клиент C #, сгенерированный из этого прото-обслуживания / достиг конечной точкив "/myprotobuf.Service/Method" и работает нормально.
GRPC_TRACE для C # дает:
Decode: ':path: /myprotobuf.Service/Method', elem_interned=1 [1], k_interned=1, v_interned=1 (edited)
Клиент Go / go-micro, вызывающий сервер C #, дает:
Decode: ':path: /myprotobuf.git.Service/Method', elem_interned=0 [2], k_interned=1, v_interned=0
с последующей ошибкой.Обратите внимание, что путь отличается.Точки останова и Console.WriteLine в обработчике C # GRPC никогда не попадают, что имеет смысл, поскольку мы не достигаем известной конечной точки.
Какое решение для этого?
go get
похоже, что в конце URL-адреса пакета требуется .git. - модулям go требуются определения "module" и "package" для соответствия URL.
- C # не понравится""в пространстве имен.
Таким образом, кажется, что Go и C # всегда собираются ставить перед конечной точкой префикс того, что представляет собой пакет / пространство имен, и они никогда не собираются договариваться о том, что пакет/ namespace должно быть.
Есть ли способ переопределить пространство имен с префиксом конечной точки GRPC?