Есть ли способ определить псевдоним импорта для сгенерированного кода go из файлов proto

Я импортирую два разных файла прототипа в свой текущий файл прототипа, как показано ниже.

import "author/message/name.proto"
import "reader/message/details.proto"

в name.proto у меня есть go_package = "author/message", а в details.proto у меня есть go_package = "reader/message", из-за чего при создании pb.go псевдоним импорта отображается, как показано ниже

message1 "author/message"

message2 "reader/message"

Я пытаюсь найти способ, в котором я могу назвать псевдонимы, такие как authormsg и readermsg соответственно, во время создания pb.go. Я проверил документацию, но не нашел способа сделать это.


person BhanuReddy    schedule 28.04.2021    source источник


Ответы (1)


Вы можете добавить явное имя пакета Go следующим образом:

  • name.proto: option go_package="author/message;authormsg"
  • details.proto: option go_package="reader/message;readermsg"

Означает, что вы добавляете имя пакета, разделенное точкой с запятой (;), после пути импорта.

Примечание:

Такое использование не рекомендуется, поскольку имя пакета по умолчанию будет производным от пути импорта разумным образом. документация по буферам протокола

person Dominik    schedule 01.06.2021
comment
Я пробовал это решение, но все еще в pb.go он генерирует псевдонимы пакетов как message1 и message2. Хотя я добавил option go_package="author/message;authormsg" option go_package="reader/message;readermsg" - person BhanuReddy; 03.06.2021
comment
@BhanuReddy Ах, вы не имеете в виду имя пакета Go, например package authormsg в name.pb.go. Вместо этого вы хотите, чтобы внутри вашего pb.go там не было import message1 "author/message"? Это может быть, когда ваш name.pb.go действительно находится в пути author/message, а protoc-gen-go предполагает Соглашение Go по умолчанию import-path base == package-name и не проверяет реальный package внутри pb.go. Однако почему вас это волнует? При использовании сгенерированного кода вы его совсем не видите. - person Dominik; 03.06.2021
comment
да, в операторе импорта псевдоним пакета не происходит, как import (MY_NAME reader / message), поскольку существует несколько импортов пакетов, как показано ниже import( message1 "reader/message" message2 "writer/message" message3 "fastreader/message" message4 "fastwriter/message" ) Имя псевдонима пакета message1 ... message4 при чтении кода становится трудно, поэтому хотелось сделать его более читаемым с помощью создание pb.go, как показано ниже import( reader "reader/message" writer "writer/message" fastreader "fastreader/message" fastwriter "fastwriter/message" ) - person BhanuReddy; 04.06.2021