Golang ProtoBuf 初学者完整教程:语法
一、编码规范推荐
1、文件名使用小写下划线的命名风格,例如 lower_snake_case.proto
2、使用 2 个空格缩进
3、包名应该和目录结构对应
4、消息名使用首字母大写驼峰风格(CamelCase),例如message StudentRequest { ... }
5、字段名使用小写下划线的风格,例如 string status_code = 1
6、枚举类型,枚举名使用首字母大写驼峰风格,例如 enum FooBar
7、RPC 服务名和方法名,均使用首字母大写驼峰风格,例如service FooService{ rpc GetSomething() }
二、protoC 执行命令
protoc --go_out=. *.proto
三、标量类型表

四、使用语法案例
// 使用proto3版本
syntax = "proto3";// 可选,防止不同的消息类型有命名冲突
package main; // 指定go的包名,会在当前目录生成一个main目录,然后里面存放*.pb.go文件
option go_package = "main"; // 导入其他的proto文件
import "mypro/other.proto"; // message是关键词,Student是类型名,后续生成一个Student的结构体
message Student { // 格式:类型 字段名 = 数字标识符,每个标识符是唯一的 string name = 1; // repeated代表字段可重复,对应Student结构体里的字段:Scores []int32repeated int32 scores = 3; // 定义一个map,键是string,值是int32map<string, int32> points = 1; // 指定了一些字段编号不应该被再次使用。这意味着在 Foo 消息的定义中,你不能再使用字段编号 2、15 以及 9 到 11(包括 9 和 11)来添加新的字段reserved 2, 15, 9 to 11; // 指定了一些字段名称不应该被再次使用。这意味着在 Foo 消息的定义中,你不能再使用字段名称 foo 或 bar 来添加新的字段。reserved "foo", "bar"; // 枚举类型enum Gender { // 开启别名alias 选项:允许为不同的枚举值赋予相同的标识符 option allow_alias = true; // 枚举类型的第一个选项标识符必须是0,也是枚举类型默认值FEMALE = 0; MALE = 1;// 开启别名选项后OTHER = 1; }Gender gender = 2;// 嵌套另一个message作为消息类型,这里会生成 Results []*Student_Result 类似这样的切片repeated Result results = 1; // 也支持直接嵌套写messagemessage Result { string url = 1;string title = 2;repeated string snippets = 3;}message ErrorStatus {string message = 1;// 标识details字段可以属于任何类型(可以是string int等),生成类似 []*anypb.Any 这样的切片,记得要在前面import "google/protobuf/any.proto"repeated google.protobuf.Any details = 2; }//todo 确保在消息的实例中,只有 oneof 定义的字段中的一个字段被赋值。这是一种类型安全的方式来表示一个字段是多个可能类型的其中之一,而不是多个字段可以同时被赋值。//在你提供的 protobuf 程序中,SampleMessage 消息定义了一个名为 test_oneof 的 oneof。这意味着在任何给定的 SampleMessage 实例中,只有 name 字段或 sub_message 字段可以被设置,而不能同时设置两者。oneof test_oneof {string name = 4;SubMessage sub_message = 9;}//如果消息类型是用来远程通信的(Remote Procedure Call, RPC),可以在 .proto 文件中定义 RPC 服务接口。//例如我们定义了一个名为 SearchService 的 RPC 服务,提供了 Search 接口,入参是 SearchRequest 类型,返回类型是 SearchResponseservice SearchService {rpc Search (SearchRequest) returns (SearchResponse);}
}message Result {string url = 1;string title = 2;repeated string snippets = 3;
}
相关文章:
Golang ProtoBuf 初学者完整教程:语法
一、编码规范推荐 1、文件名使用小写下划线的命名风格,例如 lower_snake_case.proto 2、使用 2 个空格缩进 3、包名应该和目录结构对应 4、消息名使用首字母大写驼峰风格(CamelCase),例如message StudentRequest { ... } 5、字段名使用小写下划线的风格…...
使用.cc域名的优势
域名注册越来越难了,很多人选择结尾加123、56、365等等数字,总感觉怪怪的。那么能不能选择其他后缀的域名呢?我感觉可以,大部分用户都不会去看域名,只有做技术的会去关注。 使用.cc域名的优势 很多好域名,…...
存储器管理单元MMU概述
在ARM系统中,存储器管理单元MMU主要完成以下工作: ● 虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理。它把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。页…...
了解监控易(25):网络拓扑管理,可视化监控网络,快速定位问题
在复杂的网络环境中,快速准确地定位问题、确保网络的稳定运行是至关重要的。监控易的网络拓扑管理功能,正是为了解决这一问题而设计的。该功能通过可视化监控网络,帮助用户迅速把握网络整体状况,快速定位并解决问题。 监控易的网络…...
C#学习笔记10:winform上位机与西门子PLC网口通信_中篇_winform的窗口操作设计、日志的添加使用
今日继续我的C#winform上位机学习之路 这系列笔记的目标是尝试编写一个能够与西门子PLC进行以太网口通信的上位机软件。 文章提供完整代码解释、设计点解释、测试效果图、完整工程下载 本章主要学习:Winform多个窗体的一些操作 、无边框窗体的创建、Combox组件插…...
第14章 大数据与数据科学知识点梳理
第14章 大数据与数据科学知识点梳理(附带页码) ◼ 原则:组织应仔细管理与大数据源相关的元数据,以便对数据文件及其来源和价值进行准确的清单管理。P386 ◼ 大数据:数据量大(Volume)、数据更新…...
FHE全同态加密简介
1. 何为FHE? FHE (Fully homomorphic encryption): 是一种隐私技术,支持直接对密文进行计算,而无需对密文先解密再计算。即,任何第三方或云厂商,都可对敏感信息的密文进行处理,而无需访问密文内…...
【vue】跨组件通信--依赖注入
import { provide,inject } from vue provide:将父组件的数据传递给所有子组件(子孙都有)inject:接收provide 项目文件结构 App.vue是Header.vue的父组件,Header.vue是Nav.vue的父组件 传值过程 App.vue <tem…...
Aritest+python+Jenkins解放双手iOS/Android自动化
ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案,实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念: 1. **ARITest**: ARITest 是一款功能全面的自动化测试工具,提供 UI 自动化、接口自…...
Problem #7 [Medium]
This problem was asked by Facebook. Given the mapping a = 1, b = 2, … z = 26, and an encoded message, count the number of ways it can be decoded. For example, the message ‘111’ would give 3, since it could be decoded as ‘aaa’, ‘ka’, and ‘ak’. Y…...
MySQ数据库: MySQL数据库的安装配置 ,图文步骤详细,一篇即可完成安装完成! MySQL数据库如何与客户端连接
LiuJinTao: 2024年4月14日 文章目录 MySQL的安装配置1. 下载2. 安装 三、 MySQL 启动与停止1. 第一种 方式:2. 第二种方式: 四、MySQL 客户端连接2. 方式二: MySQL的安装配置 1. 下载 官方下载网址:https://www.mysq…...
vue3+vant自动导入+pina+vite+js+pnpm搭建项目框架
vue3vant自动导入pinavitejspnpm搭建项目框架 文章目录 vue3vant自动导入pinavitejspnpm搭建项目框架1. 安装pnpm(如果还没有安装):2. 创建项目目录并进入该目录:3. 初始化项目:4. 安装Vite作为构建工具:5.…...
使用 Axios 处理 AxiosError 的三种常见方法
在使用 Axios 时处理 AxiosError 有几种常见的方法: 使用 try-catch 语句捕获异常: try {const response await axios.get(/api/data);// 处理响应数据 } catch (error) {if (error.response) {// 请求成功但状态码不在 2xx 范围console.log(error.response.data);console.l…...
linux上安装Tomcat
安装Tomcat 安装JDK https://www.oracle.com/java/technologies/downloads/#license-lightbox mkdir -p /usr/java tar xf jdk-11.0.22_linux-x64_bin.tar.gz ln -sv /usr/java/jdk /usr/java/jdk-11.0.22配置环境变量: cat > /etc/profile.d/java.sh <&…...
Ubuntu20.04安装ROS过程记录以及常见报错处理
官网安装步骤如下: http://wiki.ros.org/cn/noetic/Installation/Ubuntu#A.2BXwBZy1uJiMU- 第一个:添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-la…...
PaddleOCR 图片日期识别
目录 一 . 获取图片信息种对应坐标区域日期信息 (类型为1:http链接 类型为 2本地图片路径) 二 . ocr图片识别日期信息获取,调用获取图片区域相应位置方法 三 . 如有所需获取rtsp流回放格式 四 . 完整代码如下 (…...
HTML5学习记录
简介 超文本标记语言(HyperText Markup Language,简称HTML),是一种用于创建网页的标准标记语言。 编辑器 下载传送门https://code.visualstudio.com/ 下载编辑器插件 标题 标题通过 <h1> - <h6> 标签进行定义。 …...
提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件
法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼,以及仲裁案件,精确的法律文书撰写对于案件的成功至关重要。然而,这一过程往往既耗时又复杂,尤其是在处理复杂的案情和面对当事人难以理解…...
大数据之 Hive 快速搭建的详细步骤
Hive hive 搭建三种模式: 内嵌模式本地模式远程模式内嵌模式 Hadoop 和 Hive 整合 修改 hadoop/etc/下的 core-site.xml: <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><nam…...
从入门到高级的99个python知识点
大家好,想掌握Python编程语言,从零基础的小白晋升为大神?没问题!接下来我们将以轻松有趣的方式,逐一解锁Python学习路上的99个关键知识点。每一步都将结合实际应用场景、函数功能解析及简洁代码演示,带你深…...
Z-Image-Turbo-辉夜巫女一文详解:LoRA模型原理、Xinference服务架构与Gradio交互逻辑
Z-Image-Turbo-辉夜巫女一文详解:LoRA模型原理、Xinference服务架构与Gradio交互逻辑 1. 模型与镜像概述 1.1 什么是Z-Image-Turbo-辉夜巫女 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的LoRA版本,专门针对生成"辉夜巫女"风格图片进行…...
通义千问1.5-1.8B-Chat-GPTQ-Int4效果对比:与传统卷积神经网络在图像描述任务上的差异
通义千问1.5-1.8B-Chat-GPTQ-Int4效果对比:与传统卷积神经网络在图像描述任务上的差异 今天我们来聊一个挺有意思的话题:让一个擅长聊天的文本大模型,和一个专门看图的视觉模型,去干同一件事——描述一张图片。听起来是不是有点像…...
AI绘画实战:用ComfyUI+FLUX.1模型生成高质量写实人像的完整工作流
AI绘画实战:用ComfyUIFLUX.1模型生成高质量写实人像的完整工作流 在数字艺术创作领域,AI绘画正以惊人的速度重塑创作流程。对于追求写实人像品质的创作者而言,掌握ComfyUI与FLUX.1模型的协同工作流,相当于获得了数字画布上的超现实…...
Comsol相场断裂模拟:探索材料断裂奥秘的利器
comsol相场断裂模拟在材料科学领域,理解材料的断裂行为至关重要。而Comsol的相场断裂模拟技术,为我们打开了深入探究这一复杂现象的大门。 相场断裂模拟基本原理 相场法将裂纹看作是一种扩散界面,通过引入一个相场变量来描述材料从完好到断裂…...
PP-DocLayoutV3行业落地:法律合同要素定位、医疗报告结构识别实战解析
PP-DocLayoutV3行业落地:法律合同要素定位、医疗报告结构识别实战解析 1. 新一代文档布局分析引擎:突破传统限制 在日常工作中,我们经常需要处理各种文档——扫描的合同、拍摄的报告、电子文档截图等。传统文档分析工具往往只能识别规整的矩…...
效率系列(九) macOS 前端开发环境优化与个性化配置指南
1. 为什么需要优化macOS前端开发环境? 作为一个长期在macOS上折腾前端开发的"老司机",我深刻体会到开发环境配置对工作效率的影响。你可能遇到过这些场景:终端反应迟钝、代码补全不智能、项目切换时环境冲突...这些问题看似不大&am…...
Alibaba DASD-4B Thinking 对话工具 网络故障智能诊断:从 403 Forbidden 到连接超时
Alibaba DASD-4B Thinking 对话工具 网络故障智能诊断:从 403 Forbidden 到连接超时 遇到网络问题,比如网页打不开显示“403 Forbidden”,或者一直转圈最后提示“连接超时”,是不是感觉特别头疼?以前遇到这种问题&…...
基于Comsol的非均匀热源流热拓扑优化之旅
基于comsol的非均匀热源流热拓扑优化,使用归一化方法以最大换热量以及最小化压降进行双目标函数、以流体体积分数为约束进行液冷散热冷板测拓扑优化设计,报告案例源文件以及参考文献 在散热设计领域,液冷散热冷板的拓扑优化是个极具挑战又充…...
STM32 GPIO模式全解析:从开漏到PWM,这些坑我帮你踩过了
STM32 GPIO模式全解析:从开漏到PWM,这些坑我帮你踩过了 刚接触STM32开发时,GPIO模式的选择常常让我陷入纠结——开漏输出为什么要外接上拉电阻?推挽输出驱动继电器为什么会烧芯片?PWM频率选多少才能让LED不闪烁&#…...
【路径规划】在二维和三维空间中实现RRT_算法,根据障碍物位置和尺寸实现的避障功能附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
