我正在構建一個轉譯器,需要了解 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 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消