为 protobuf 类型导入范围查找

我正在构建一个转译器,需要了解 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包名的根目录吗?


还是基于导入的更通用的范围查找?


任何见解或阅读链接表示赞赏:)


ITMISS
浏览 114回答 1
1回答

青春有我

我不确定我是否完全理解这个问题,但我会尽力回答。如果您需要我更改它,请告诉我。这是两者的结合。您需要拥有包并导入 .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- 因为包中没有定义这样的类型希望这很清楚
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go