我正在构建一个转译器,需要了解 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- 因为包中没有定义这样的类型
希望这很清楚
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报
0/150
提交
取消