【问题标题】:Is there a way to define import alias for go generated code from proto files有没有办法为从 proto 文件生成的代码定义导入别名
【发布时间】:2021-07-22 04:06:12
【问题描述】:

我在当前的 proto 文件中导入两个不同的 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"

我正在尝试找到一种方法,在 pb.go 生成期间,我可以分别命名为 authormsg 和 readermsg 之类的别名。我已经检查了文档,但无论如何都找不到。

【问题讨论】:

    标签: go protocol-buffers protoc


    【解决方案1】:

    您可以像这样添加明确的 Go 包名称:

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

    表示在导入路径后添加以分号 (;) 分隔的包名。

    注意:

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

    【讨论】:

    • 我已经尝试过这个解决方案,但仍然在 pb.go 中生成包别名为 message1 和 message2。即使我添加了option go_package="author/message;authormsg" option go_package="reader/message;readermsg"
    • @BhanuReddy 啊,你不是指 Go 包名,例如package authormsgname.pb.go。相反,您是否希望 inside 您的pb.go 没有import message1 "author/message"?那可能是当您的name.pb.go 真正驻留在路径author/message 中并且protoc-gen-go 假定Go's convention import-path base == package-name 并且不检查package 中的真实pb.go。但是,你为什么关心这个?使用生成的代码时,根本看不到。
    • 是的,在 import 语句中包别名不像 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" )
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多