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.tpcf.cn/pingmian/83877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KMeans 算法深度解析:从原理到实战

一、算法概述:无监督学习的聚类利器​ 在机器学习的无监督学习领域,聚类算法是探索数据内在结构的重要工具。KMeans 算法作为划分式聚类的代表,因其简单高效的特性,成为数据科学家工具箱中的必备技能。该算法通过将 n 个数据点划…

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…

Server2003 B-1 Windows操作系统渗透

任务环境说明: 服务器场景:Server2003(开放链接) 服务器场景操作系统:Windows7 1.通过本地PC中渗透测试平台Kali对服务器场景Windows进行系统服务及版本扫描渗透测试,并将该操作显示结果中Telnet服务对应的…

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…

使用React+ant Table 实现 表格无限循环滚动播放

数据大屏表格数据&#xff0c;当表格内容超出&#xff08;出现滚动条&#xff09;时&#xff0c;无限循环滚动播放&#xff0c;鼠标移入暂停滚动&#xff0c;鼠标移除继续滚动&#xff1b;数据量小没有超出时不需要滚动。 *使用时应注意&#xff0c;滚动区域高度父元素高度 - 表…

机器人现可完全破解验证码:未来安全技术何去何从?

引言 随着计算机视觉技术的飞速发展&#xff0c;机器学习模型现已能够100%可靠地解决Google的视觉reCAPTCHAv2验证码。这标志着一个时代的结束——自2000年代初以来&#xff0c;CAPTCHA&#xff08;"全自动区分计算机与人类的图灵测试"的缩写&#xff09;一直是区分…

大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患

大模型安全测试报告&#xff1a;千问、GPT 全系列、豆包、Claude 表现优异&#xff0c;DeepSeek、Grok-3 与 Kimi 存在安全隐患 引言 随着生成式人工智能技术的快速演进&#xff0c;大语言模型&#xff08;LLM&#xff09;正在广泛应用于企业服务、政务系统、教育平台、金融风…

docker 部署redis集群 配置

docker的网络模式 网桥模式每次重启容器都有可能导致容器ip地址变化&#xff0c;需要固定ip的自己自定义网络&#xff0c;这里介绍的是默认网络模式 docker创建容器 docker run --name redis6379 -p 6379:6379 -p 16379:16379 -v /etc/redis/redis6379:/etc/redis -d --r…

LabVIEW的AMC架构解析

此LabVIEW 程序基于消息队列&#xff08;Message Queue&#xff09;机制构建 AMC 架构&#xff0c;核心包含消息生成&#xff08;MessageGenerator &#xff09;与消息处理&#xff08;Message Processor &#xff09;两大循环&#xff0c;通过队列传递事件与指令&#xff0c;实…

数据库管理与高可用-MySQL主从复制与读写分离

目录 #1.1MySQL主从复制原理 1.1.1MySQL支持的复制类型 1.1.2复制的工作过程 #2.1MySQL读写分离原理 2.1.1常见的MySQL读写分离为为两种 #3.1主从复制读写分离的实验案例 1.1MySQL主从复制的原理 MySQL 主从复制是一种常用的数据同步机制&#xff0c;用于将主数据库&#xf…

Python60日基础学习打卡Day45

之前的神经网络训练中&#xff0c;为了帮助理解借用了很多的组件&#xff0c;比如训练进度条、可视化的loss下降曲线、权重分布图&#xff0c;运行结束后还可以查看单张图的推理效果。 如果现在有一个交互工具可以很简单的通过按钮完成这些辅助功能那就好了&#xff0c;他就是…

React项目的状态管理:Redux Toolkit

目录 1、搭建环境 2、Redux Toolkit 包含了什么 3、使用示例 &#xff08;1&#xff09;创建user切片 &#xff08;2&#xff09;合并切片得到store &#xff08;3&#xff09;配置store和使用store 使用js来编写代码&#xff0c;方便理解一些 1、搭建环境 首先&#xf…

父组件prop传向子组件的值,被子组件直接v-model绑定 功能不生效

隐式修改组件属性会导致功能异常 实际操作中发现&#xff0c;即便是父组件把简单数据通过prop传给了子组件&#xff0c;子组件再使用v-model绑定&#xff0c;也不行&#xff0c;响应式还是对异常 原vue2业务中存在组件定义某个类型为Object的属性&#xff0c;然后将该属性对象…

c#bitconverter操作,不同变量类型转byte数组

缘起:串口数据传输的基础是byte数组&#xff0c;write(buff,0,num)或者writeline(string)&#xff0c;如果是字符串传输就是string变量就可以了&#xff0c;但是在modbus这类hex传递时&#xff0c;就要遇到转换了&#xff0c;拼凑byte数组时需要各种变量的值传递&#xff0c;解…

【Redis】set 类型

set 一. set 类型介绍二. set 命令sadd、smembers、sismemberscard、spop、srandmembersmove、srem集合间操作交集&#xff1a;sinter、sinterstore并集&#xff1a;sunion、sunionstore差集&#xff1a;sdiff、sdiffstore 三. set 命令小结四. set 内部编码方式五. set 使用场…

02-Redis常见命令

02-Redis常见命令 Redis数据结构介绍 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a; 贴心小建议&#xff1a;命令不要死记&#xff0c;学会查询就好啦 Redis为了方便学习&#xff0c;将操作不同数据类型的命…

Rk3568驱动开发_GPIO点亮LED_12

需求&#xff1a; 用配置寄存器方式控制点灯非常原始&#xff0c;现在采用更方便的Linux提供的pctrl和gpio子系统编写字符驱动 1.设备树配置&#xff1a; 现将开发板中呼吸灯关闭掉防止占用到我需要使用的引脚 /* Narnat 2025-5-29 RK3568 GPIO 无需设置pinctrl*/gpioled{co…

阿里云ACP云计算备考笔记 (3)——云存储RDS

目录 第一章 云存储概览 1、云存储通用知识 ① 发展历史 ② 云存储的优势 2、云存储分类 3、文件存储业务场景 第二章 块存储 1、块存储分类 2、云盘的优势 3、创建云盘 4、管理数据盘 ① 格式化数据盘 ② 挂载数据盘 ③ 通过 API 挂载云盘 5、管理系统盘 ① 更…

亚矩阵云手机实测体验:稳定流畅背后的技术逻辑​

最近在测试一款云手机服务时&#xff0c;发现亚矩阵的表现出乎意料地稳定。作为一个经常需要多设备协作的开发者&#xff0c;我对云手机的性能、延迟和稳定性要求比较高。经过一段时间的体验&#xff0c;分享一下真实感受&#xff0c;避免大家踩坑。 ​​1. 云手机能解决什么问…

STM32H562----------ADC外设详解

1、ADC 简介 STM32H5xx 系列有 2 个 ADC,都可以独立工作,其中 ADC1 和 ADC2 还可以组成双模式(提高采样率)。每个 ADC 最多可以有 20 个复用通道。这些 ADC 外设与 AHB 总线相连。 STM32H5xx 的 ADC 模块主要有如下几个特性: 1、可配置 12 位、10 位、8 位、6 位分辨率,…