当前位置: 首页 > news >正文

Protobuf 中的类型查找规则

a.proto

syntax = "proto2"; //protoc3生成代码兼容proto2语法
package pkgA;
message Example {
}

ba.proto

package pkgB.pkgA;
message Example {
}

b.proto

syntax = "proto3"; //protoc3生成代码兼容proto2语法
package pkgB;
import "test1/a.proto";
import "test1/ba.proto";
message Example {
}
message Test {Example simple = 9; // ①// 使用全名来引用 pkgA 中的 example.pkgA.Example field_in_pkgA = 1; // ②// 使用包名+类型名来引用pkgB.Example field_in_pkgB = 2; // ③pkgA.Example field_in_pkgA2 = 3; // ④pkgB.pkgA.Example field_in_pkgc = 4; // ⑤
}

类型引用规则说明部分

类型名中的 . 表示全限定名(全名),.pkg.msg 精确地表示 msg 属于 pkg。如果没有 .,则需要按照一定的规则查找类型。

  • 对于情况①:没有包的情况,以当前文件的包为准,最终结果:pkgB.Example
  • 对于情况②:以 . 开头表示全名,最终结果:.pkgA.Example
  • 对于情况③:包名是 pkgB,首先从当前包(当前文件与 pkgB 拼接),即 .pkgB.pkgB 中查找 Example,即 .pkgB.pkgB.Example。但没有找到,则会全局搜索,即 .pkgB.Example
  • 对于情况④:包名是 pkgA,首先从当前包即 .pkgB.pkgA 中查找 Example,最终结果:.pkgB.pkgA.Example。假如没找到,则会从全局搜索符号,即搜索 .pkgA.Example
  • 对于情况⑤:首先从当前包查找,由于没找到,从全局符号中搜索,最终结果:.pkgB.pkgA.Example

总结部分

  1. 对于全名,直接查找对应的 pkg。详细步骤是,搜索当前文件的所有 import,排除 pkg 不匹配的 import 文件,然后依次搜索哪个文件中有对应的类型。
  2. 对于没有类型 pkg 的情况,只从当前文件所在的包中搜索类型。
  3. 其他情况,依次执行
    • a. 在类型 pkg 前面拼接上当前文件的 pkg,在所有包名为 文件pkg.类型pkg 一致的 import 文件中,搜索该类型。
    • b. 在所有包名与当前文件一致的 import 文件中,搜索该类型。
http://www.xdnf.cn/news/923545.html

相关文章:

  • ADB识别手机系统弹授权框-如何处理多重弹框叠加和重叠问题
  • 现代C++特性(一):基本数据类型扩展
  • Unity的日志管理类
  • 东芝Toshiba e-STUDIO2110AC打印机信息
  • 用电脑通过USB总线连接控制keysight示波器
  • csrf攻击学习
  • Java 8 Stream API 入门到实践详解
  • Robot Framework 一个通用的 自动化测试框架
  • 【DAY42】Grad-CAM与Hook函数
  • 大模型Agent智能体介绍和应用场景
  • SpiritTools:一款小而精的实用工具箱
  • nonlocal 与global关键字
  • BeckHoff--MES数据交互 MQ TRANCE API (MQ 追溯 API - 系统概述和命令参考)
  • YOLOv8 升级之路:主干网络嵌入 SCINet,优化黑暗环境目标检测
  • gawk 指令
  • NPOI Excel用OLE对象的形式插入文件附件以及插入图片
  • 元器件基础学习笔记——结型场效应晶体管 (JFET)
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
  • Golang——10、日志处理和正则处理
  • 自制操作系统(五、重写引导部分和C语言的使用)
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • 【论文解读】DeepSeek-R1
  • 一款“短小精悍的”手机录屏软件
  • 【C++】类型转换
  • 抖音怎么下载视频?抖音怎么无水印下载别人的视频
  • 蓝凌的流程引擎队列分发器
  • Python whl安装包简介与制作完全指南
  • 【优选算法】前缀和
  • Windows 下端口占用排查与释放全攻略