为 protobuf 类型导入范围查找
Go import scope lookup for protobuf types
我正在构建一个转译器,需要了解 protobuf/go 作用域查找系统。我一直在尝试 google 文档,但没有成功。
问:在 Go/protobufs 中导入类型时,是否可以进行共享包范围查找?
这是我要质疑的例子:
proto1:
package cosmos.crypto.keyring.v1;
...
message Ledger {
hd.v1.BIP44Params path = 1;
}
proto2:
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
吗?
还是基于导入的更通用的范围查找?
感谢任何见解或阅读链接:)
我不确定我是否完全理解问题,但我会尽力回答。如果您需要我更改它,请告诉我。
这是两者的结合。您需要拥有包并导入 .proto 文件。让我解释。如果你有两个文件定义如下:
proto1.proto
syntax = "proto3";
package cosmos.crypto.keyring.v1;
message Ledger {
hd.v1.BIP44Params path = 1;
}
proto2.proto
syntax = "proto3";
package cosmos.crypto.hd.v1;
message BIP44Params {}
尝试编译会告诉你 "hd.v1.BIP44Params" is not defined
。这是因为 proto1.proto
不知道其他定义。现在,如果您在 proto1.proto
中 import "proto2.proto";
,它将知道 BIP44Params
定义并会注意到包定义。
有了这个包定义,它将能够访问以下类型定义:
cosmos.crypto.hd.v1.BIP44Params
- 不言自明
hd.v1.BIP44Params
- 因为两个包在 hd
部分之前匹配。
但应该可以访问:
BIP44Params
- 因为在 cosmos.crypto.keyring.v1
包 中没有定义这样的类型
希望清楚
我正在构建一个转译器,需要了解 protobuf/go 作用域查找系统。我一直在尝试 google 文档,但没有成功。
问:在 Go/protobufs 中导入类型时,是否可以进行共享包范围查找?
这是我要质疑的例子:
proto1:
package cosmos.crypto.keyring.v1;
...
message Ledger {
hd.v1.BIP44Params path = 1;
}
proto2:
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
吗?
还是基于导入的更通用的范围查找?
感谢任何见解或阅读链接:)
我不确定我是否完全理解问题,但我会尽力回答。如果您需要我更改它,请告诉我。
这是两者的结合。您需要拥有包并导入 .proto 文件。让我解释。如果你有两个文件定义如下:
proto1.proto
syntax = "proto3";
package cosmos.crypto.keyring.v1;
message Ledger {
hd.v1.BIP44Params path = 1;
}
proto2.proto
syntax = "proto3";
package cosmos.crypto.hd.v1;
message BIP44Params {}
尝试编译会告诉你 "hd.v1.BIP44Params" is not defined
。这是因为 proto1.proto
不知道其他定义。现在,如果您在 proto1.proto
中 import "proto2.proto";
,它将知道 BIP44Params
定义并会注意到包定义。
有了这个包定义,它将能够访问以下类型定义:
cosmos.crypto.hd.v1.BIP44Params
- 不言自明hd.v1.BIP44Params
- 因为两个包在hd
部分之前匹配。
但应该可以访问:
BIP44Params
- 因为在cosmos.crypto.keyring.v1
包 中没有定义这样的类型
希望清楚