# #go #encapsulation #protoc #grpc-go #generated-code
Вопрос:
Я пытаюсь создать серверный интерфейс, созданный по протоколу, и реализацию клиента в отдельных пакетах
Часть заголовка моих .proto
файлов выглядит следующим образом:
syntax = "proto3";
option go_package = "github.com/<username>/<myservice>/pkg/grpc";
И я использую эту команду для создания .go
файлов:
protoc --go_out=. --go_opt=paths=source_relative
--go-grpc_out=. --go-grpc_opt=paths=source_relative
pkg/grpc/*.proto
Он генерирует pkg/grpc/<name>.pb.go
файлы, содержащие модели, и pkg/grpc/<name>_grpc.pb.go
файлы, содержащие интерфейс сервера и реализацию клиента (рисунок)
Но я хочу, чтобы сервер перешел , скажем internal/pkg/grpc/
, в то время как клиент и модели остаются внутри pkg/grpc/
, а сервер правильно импортирует модели.
Версии:
protoc
версия являетсяlibprotoc 3.19.0
protoc-gen-go-grpc
версия являетсяprotoc-gen-go-grpc 1.1.0
protoc-gen-go
версия являетсяprotoc-gen-go v1.27.1
Я новичок в голанге и протобуфе, поэтому, если то, о чем я прошу, окажется плохой практикой, не стесняйтесь указывать мне на идиоматическую
Ответ №1:
Похоже, что для этого нет возможности. Плагин protoc-gen-go-grpc
записывает выходной сервисный код в один и тот же файл с _grpc.pb.go
суффиксом, где «сервис» включает как клиентский, так и серверный код.
Вы можете определить только разные пути вывода для каждого плагина:
protoc-gen-go
поддержка--go_out
и--go_opt
флагиprotoc-gen-go-grpc
поддержка--go-grpc_out
и--go-grpc_opt
флаги