为了账号安全,请及时绑定邮箱和手机立即绑定

为 protobuf 类型导入范围查找

为 protobuf 类型导入范围查找

Go
ITMISS 2022-12-13 16:11:56
我正在构建一个转译器,需要了解 protobuf/go 范围查找系统。我一直在尝试用谷歌搜索文档,但没有找到任何运气。问:在 Go/protobufs 中导入类型时,是否可以进行共享包范围查找?这是我质疑的例子:原型1:package cosmos.crypto.keyring.v1;...message Ledger {    hd.v1.BIP44Params path = 1;}原型2:package cosmos.crypto.hd.v1;message BIP44Params {    ...}到目前为止,我看到有两种语法确实有意义:全范围message Ledger {    cosmos.crypto.hd.v1.BIP44Params path = 1;}或者我也见过这样的版本完全没有作用域message Ledger {   BIP44Params path = 1;}部分范围?但我看到的风格是部分范围message Ledger {    hd.v1.BIP44Params path = 1;}他们离开的原因是cosmos.crypto因为这两个包共享cosmos.crypto包名的根目录吗?还是基于导入的更通用的范围查找?任何见解或阅读链接表示赞赏:)
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

我不确定我是否完全理解这个问题,但我会尽力回答。如果您需要我更改它,请告诉我。


这是两者的结合。您需要拥有包并导入 .proto 文件。让我解释。如果你有两个文件定义如下:


这就是为什么1.这就是为什么

syntax = "proto3";

package cosmos.crypto.keyring.v1;


message Ledger {

    hd.v1.BIP44Params path = 1;

}

这就是为什么2.这就是为什么

syntax = "proto3";

package cosmos.crypto.hd.v1;


message BIP44Params {}

尝试编译会告诉你"hd.v1.BIP44Params" is not defined。这是因为proto1.proto不知道其他定义。现在,如果您import "proto2.proto";在 中proto1.proto,它将知道定义BIP44Params并注意到包定义。


使用此包定义,它将能够访问以下类型定义:


cosmos.crypto.hd.v1.BIP44Params- 这是不言自明的

hd.v1.BIP44Params- 因为这两个包匹配之前的hd部分。

但它应该能够访问:


BIP44Paramscosmos.crypto.keyring.v1- 因为包中没有定义这样的类型

希望这很清楚


查看完整回答
反对 回复 2022-12-13
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号