proto3 语法

news2025/10/24 3:40:57

proto3语法规则简介

  • 1.类型
    • 1.1基础类型
    • 1.1.1字符串定义
    • 1.1.2 整型
    • 1.1.3 其他
    • 1.2 复杂类型
      • 1.2.1 枚举
      • 1.2.2 map
      • 1.2.3 any 相当于object 存储任意对象
    • 1.2.4 结构体message
  • 2.字段规则
    • 2.1singular(单值):默认
  • repeated(重复值):数组
  • 2.结构体定义

1.类型

1.1基础类型

1.1.1字符串定义

关键字 string
// 定义一个data字符串变量,1是标号,每个结构体的标号不能重复。
eg: string data = 1;

1.1.2 整型

关键字
// 状态
int32 status = 1;

1.1.3 其他

double:双精度浮点数
float:单精度浮点数
int32:32 位有符号整数(int)
int64:64 位有符号整数 (long)
uint32:32 位无符号整数
uint64:64 位无符号整数
sint32:32 位有符号整数(使用变长编码)
sint64:64 位有符号整数(使用变长编码)
fixed32:32 位固定长度整数
fixed64:64 位固定长度整数
sfixed32:32 位固定长度有符号整数
sfixed64:64 位固定长度有符号整数
bool:布尔值
string:字符串
bytes:字节

默认值:

string      默认值是空字符串
bytes       默认值是空字节序列
bool        默认值是false
number      默认值是0
enum        默认值是定义的第一个枚举值,且必须为0
message     默认值依赖具体的语言;
repeated    默认是空,在恰当的语言中,通常是空列表

1.2 复杂类型

1.2.1 枚举

枚举类型名称:使用驼峰命名法,首字母大写。这有助于提高代码的可读性和一致性。

常量值名称:常量值通常使用全大写字母表示,并且多个单词之间使用下划线连接。


// 0值必须存在,且作为第一个枚举常量的值
// 枚举值范围:32位整数范围,不要设置负数
enum PhoneType {
  MP = 0;  // 移动电话
  TEL = 1; // 固定电话
}

1.2.2 map

map<key_type, value_type> myMap = N;

1.2.3 any 相当于object 存储任意对象

google.protobuf.Any addr = 4;

1.2.4 结构体message

// 定义一个返回消息类型,名为 MessResponse
message MessResponse {

    // 状态
    int32 status = 1;

    // 消息
    string msg = 2;

    // 数据
    string data = 3;
}

2.字段规则

字段规则
当定义消息类型时,字段可以使用不同的规则进行修饰,以确定其在消息中的行为。以下是两种常见的字段修饰规则:

2.1singular(单值):默认

这种规则表示消息中的字段最多可以包含一个值。如果未设置该字段,则其值为默认值(例如0、false、空字符串等)。
在proto3语法中,字段默认使用这种规则,因此如果未显式指定规则,则字段被视为单值字段。
例如,如果定义了一个姓名字段为singular规则,则该消息中每个实例只能包含一个姓名值。

repeated(重复值):数组

这种规则允许消息中的字段包含任意数量的值,包括零个。字段的值以数组形式存储,并且重复值的顺序会被保留。
在消息中可以多次出现相同的字段,并且每次出现的值都会被添加到该字段的值数组中。
例如,如果定义了一个电话号码字段为repeated规则,则该消息中的每个实例可以包含任意数量的电话号码。

2.结构体定义


message Phone {
  string number = 1;
}
 
// 定义联系人 
message People {
  // 字段类型 字段名 = 字段唯一编号;
  string name = 1;
  int32 age = 2;
}

// 定义联系人 
message PeoplePhone {
  // 字段类型 字段名 = 字段唯一编号;
  string name = 1;
  int32 age = 2;
  repeated Phone phone = 3;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1693211.html

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

相关文章

Spring MVC/Web

1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;也是Spring框架的一部分。它提供了灵活可扩展的MVC架构&#xff0c;方便开发者构建高性能的Web应用程序&#xff0c;并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC&#xff08;Model…

【静态分析】在springboot使用太阿(Tai-e)01

参考&#xff1a;使用太阿&#xff08;Tai-e&#xff09;进行静态代码安全分析&#xff08;spring-boot篇一&#xff09; - 先知社区 ---------------------------------------------------------------------- 由于spring-boot实现了控制反转与面向切面编程的设计思想&#x…

Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装

目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装&#xff0c;只安装 nvidia 驱动&#xff08;亲测可用&#xff01;&#xff09; 2. 通过 software & Updates 安装&#xff0c;安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…

微信好友这样打标签更高效!

为什么要做标签管理? ① 通过标签管理&#xff0c;可以清晰的知道每个私域好友的关系程度&#xff0c;如哪些是忠诚客户&#xff0c;哪些是意向客户&#xff0c;哪些是刚加上的客户等等。 这样就知道下一步要怎么操作&#xff0c;做到精细化运营。如忠诚客户跟进维护&#x…

逍遥模拟器安装xp时报错处理

在执行script.sh&#xff0c;无法执行程序&#xff0c;报错如下&#xff1a; Mounting /system and /vendor read-write /dev/block/sda6 is read-only 尝试了很多种的方法&#xff0c;都不行 经过研究发现是逍遥模拟器的设置问题&#xff1a; 出问题时&#xff0c;磁盘共享…

VBA批量合并带有图片、表格与文本框的Word

本文介绍基于VBA语言&#xff0c;对大量含有图片、文本框与表格的Word文档加以批量自动合并&#xff0c;并在每一次合并时添加分页符的方法。 在我们之前的文章基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符&#xff08;https://blog.csdn.net/zhebu…

[读论文]精读Self-Attentive Sequential Recommendation

论文链接&#xff1a;https://arxiv.org/abs/1808.09781 其他解读文章&#xff1a;https://mp.weixin.qq.com/s/cRQi3FBi9OMdO7imK2Y4Ew 摘要 顺序动态是许多现代推荐系统的一个关键特征&#xff0c;这些系统试图根据用户最近执行的操作来捕获用户活动的“上下文”。为了捕捉…

【热门话题】CentOS 常见命令指南

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 CentOS 常见命令指南一、文件与目录操作1. 切换目录2. 查看当前目录3. 列出目录…

vue+iview tabs context-menu 弹出框怎么修改样式

今天遇到一个需求说页面顶部的菜单右键弹出框离得有点远 代码是这样 <Tabs type"card" closable class"main-tags-col-tabs" v-model"activeTab" on-click"handleClickTag" :before-remove"handleBeforeRemove" capt…

ArcGIS提取含有计曲线的等高线

喜欢就关注我们吧&#xff01; 今天我么来看看&#xff0c;如何利用DEM提取含有计曲线的等高线&#xff01; 常规的话我们利用DEM提取的等高线都是不带计曲线的&#xff0c;无法把计曲线标注出来&#xff0c;今天我们就来看下&#xff0c;如何处理一下哦&#xff01;提取带有计…

【狂神说Java】Redis笔记以及拓展

一、Redis 入门 Redis为什么单线程还这么快&#xff1f; 误区1&#xff1a;高性能的服务器一定是多线程的&#xff1f; 误区2&#xff1a;多线程&#xff08;CPU上下文会切换&#xff01;&#xff09;一定比单线程效率高&#xff01; 核心&#xff1a;Redis是将所有的数据放在内…

开视频号小店要花哪些钱?这些费用大家要知道

大家好&#xff0c;我是喷火龙。 目前&#xff0c;视频号小店从推出到现在已经快两年的时间了&#xff0c;视频号小店虽然门槛高&#xff0c;但是单价也高&#xff0c;利润也高&#xff0c;市场环境也好&#xff0c;算是一个不错的项目。 接下来给大家讲讲开视频号小店要花哪…

ensp-三层交换技术

交换机-三层交换 一.概述 单臂路由有明显的缺陷,单臂路由的链路使用率高,可能会造成网路拥塞,造成网络不可用 可以让多个交换机连接路由器的不同接口,但是路由器的接口毕竟有限,不像交换机一样有那么多接口 使用三层交换解决路由器接口不够用问题 二.三层交换 1.创建多个VLAN…

可重构柔性装配产线,为智能制造领域带来了新的革命性变革

随着科技的飞速发展&#xff0c;个性化需求逐渐成为市场的主导。在这个充满变革的时代&#xff0c;制造业正面临着前所未有的挑战和机遇。如何快速响应市场需求、提高生产效率、保证产品质量&#xff0c;成为每一家制造企业必须思考的问题。 在这样的背景下&#xff0c;富唯智…

【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在现代网络通信和路径规划领域&#xff0c;最短路径路由优化算法是一项关键技术。它涉及在给定的网络拓扑中寻找从源点到目标点的最短或成本最低的路径。近年来&#xff0c;遗传算法&#xff08;GA&#xff09;因其出色的全局…

Python3 笔记:部分专有名词解释

1、python 英 /ˈpaɪθən/ 这个词在英文中的意思是蟒蛇。但据说Python的创始人Guido van Rossum&#xff08;吉多范罗苏姆&#xff09;选择Python这个名字的原因与蟒蛇毫无关系&#xff0c;只是因为他是“蒙提派森飞行马戏团&#xff08;Monty Python&#xff07;s Flying Ci…

2024.05.18学习记录

1、Vue3 Composition API Vite jsx 2、react 基本使用、高级用法 3、刷题&#xff1a;回溯部分剩下的题目

屎山代码SSM转换Springboot

SSM项目转Springboot项目 最近很多人可能是在网上买的那种屎山代码&#xff0c;数据库都是拼音的那种 比如项目如下所示&#xff1a; 这种屎山代码我改过太多了&#xff0c;很多人可能无从下手&#xff0c;因为代码结构太混乱了&#xff0c;但是我改过太多这种代码&#xff0…

用HAL库改写江科大的stm32入门例子-6-2 定时器外部时钟

实验目的&#xff1a; 熟悉外部时钟的应用。 实验步骤&#xff1a; 创建项目参照前面的文章&#xff0c;集成oled(没有oled,用uart串口传递也可以)选择外部时钟源时钟源参数设置编写代码&#xff1a; 5.1声明全局变量&#xff0c;如果发生定时器中断的时候&#xff0c;在回调…

从ZooKeeper切换到ClickHouse-Keeper,藏着怎样的秘密

本文字数&#xff1a;7772&#xff1b;估计阅读时间&#xff1a;20 分钟 作者&#xff1a;博睿数据 李骅宸&#xff08;太道&#xff09;& 小叮当 本文在公众号【ClickHouseInc】首发 本系列前两篇内容&#xff1a; 从ES到ClickHouse&#xff0c;Bonree ONE平台更轻更快&a…