有没有办法为proto文件生成的go代码定义导入别名

有没有办法为proto文件生成的go代码定义导入别名,go,protocol-buffers,protoc,Go,Protocol Buffers,Protoc,我正在导入两个不同的原型文件在我的当前原型文件如下 import "author/message/name.proto" import "reader/message/details.proto" 在name.proto中,我有go\u package=“author/message”,在details.proto中,我有go\u package=“reader/message”,因此在生成pb.go时,导入别名如下所示 message1 "a

我正在导入两个不同的原型文件在我的当前原型文件如下

import "author/message/name.proto"
import "reader/message/details.proto"
在name.proto中,我有
go\u package=“author/message”
,在details.proto中,我有
go\u package=“reader/message”
,因此在生成pb.go时,导入别名如下所示

message1 "author/message"

message2 "reader/message"

我试图找到一种方法,在pb.go生成过程中分别命名authormsg和readermsg这样的别名。我已经检查了文档,但找不到任何方法来执行此操作。

您可以像下面这样添加显式Go程序包名称:

  • name.proto
    选项go\u package=“author/message;authormsg”
  • details.proto
    选项go\u package=“reader/message;readermsg”
表示在导入路径后添加以分号(
)分隔的包名

注:

不鼓励这种用法,因为默认情况下,包名将以合理的方式从导入路径派生。


是的,对了,我怎样才能让protoc理解它必须为特定的packgemay生成一个命名的导入我可以问一下这个用例是什么?为什么要更改
.pb.go
文件中的包名?@backgreen只是为了可读性,我尝试了此解决方案,但仍在pb.go中,它正在生成包别名message1和message2。即使我添加了
选项go\u package=“author/message;authormsg”
选项go\u package=“reader/message;readermsg”
@bhanureddah,您也不是指go包名,例如
name.pb.go中的
包authormsg
。相反,您希望在
pb.go中没有
import message1“author/message”
?这可能是当您的
name.pb.go
真正驻留在路径
author/message
中时,
protoc gen go
假设并没有检查
pb.go
中的真正
包时。但是,你为什么关心这个?当使用生成的代码时,您根本看不到它。是的,在导入语句中,包别名与导入(我的名字“reader/message”)不同,因为有多个包导入,如下面的
import(message1“reader/message”message2“writer/message”message3“fastreader/message”message4“fastwriter/message”)
包别名消息1。。。message4在阅读代码时变得越来越困难,因此希望通过生成pb使其更具可读性。如下图所示导入(reader“reader/message”writer“writer”writer/message“fastreader”fastreader/message“fastwriter”fastwriter/message)