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

grpc学习golang版( 三、proto文件数据类型 )

系列文章目录
第一章 grpc基本概念与安装
第二章 grpc入门示例
第三章 proto文件数据类型
第四章 多服务示例
第五章 多proto文件示例
第六章 服务器流式传输
第七章 客户端流式传输
第八章 双向流示例


文章目录

  • 一、proto语法
  • 二、proto中的标量类型
  • 三、proto中的数组类型
  • 四、proto中的Map类型
  • 五、proto中的嵌套类型
  • 六、proto中的编写风格


一、proto语法

关键词注释
syntax指定版本,一般用“proto3”
package指定默认包名
service对应的go里面的接口,可以作为服务端,客户端
rpc对应结构体中的方法
message对应的结构体

二、proto中的标量类型

标量类型对应go类型解释
doublefloat64
floatfloat32
int32int32使用变长编码,对于负值的效率很低,如果你的域有可能有负值,请使用sint64替代
uint32uint32使用变长编码
uint64uint64使用变长编码
sint32int32使用变长编码,这些编码在负值时比int32高效的多
sint64int64使用变长编码,有符号的整型值。编码时比通常的int64高效
fixed32uint32总是4个字节,如果数值总是比总是比228大的话,这个类型会比uint32高效
fixed64uint64总是8个字节,如果数值总是比总是比256大的话,这个类型会比uint64高效
sfixed32int32总是4个字节
sfixed64int64总是8个字节
boolbool
stringstring一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本
bytes[]byte可能包含任意顺序的字节数据

标量类型如果没有被赋值,则不会被序列化,解析时,会赋予默认值

  • strings:空字符串
  • bytes:空序列
  • bools:false
  • 数值类型:0

三、proto中的数组类型

关键词repeated,示例中的Request为结构体,repeated Request表示Request结构体数组
示例:

message ArrayRequest {repeated int64 a1 = 1;repeated string a2 = 2;repeated Request request_list = 3;
}

对应go类型

type ArrayRequest struct {A1          []int64 A2          []string   RequestList []*Request
}

四、proto中的Map类型

关键词map键只能是标量类型
示例:

message MapRequest {map<int64, string> m_i_s = 1;map<string, bool> m_i_b = 2;map<string, ArrayRequest> m_i_arr = 3;
}

对应go类型

type MapRequest struct {MIS   map[int64]stringMIB   map[string]boolMIArr map[string]*ArrayRequest
}

五、proto中的嵌套类型

Q2结构体即为内嵌结构体,可以把它比作java的内部类
示例:

message Q1 {message Q2{string name2 = 2;}string name1 = 1;Q2 q2 = 2;
}

对应go类型

type Q1 struct {state         protoimpl.MessageStatesizeCache     protoimpl.SizeCacheunknownFields protoimpl.UnknownFieldsName1 string `protobuf:"bytes,1,opt,name=name1,proto3" json:"name1,omitempty"`Q2    *Q1_Q2 `protobuf:"bytes,2,opt,name=q2,proto3" json:"q2,omitempty"`
}

六、proto中的编写风格

  • 文件名建议下划线,例如:my_student.proto
  • 包名和目录名对应,例如:package hello_grpc 对应 hello_grpc目录
  • 服务名、方法名、消息名均为大驼峰,例如:service HelloService、rpc SayHello、message HelloRequest
  • 字段名为下划线,例如:string user_id = 1

完成ヾ(◍°∇°◍)ノ゙

相关文章:

  • 非常疑惑文章变成了仅VIP可读
  • 【高考志愿】建筑学
  • 深圳信息职业技术学院联合开源网安,培育新一代复合型网安人才
  • 高阶面试-spring的部分
  • Android Style 使用指南
  • 汽车电子行业知识:什么是车载智能座舱
  • Spring Boot配置文件properties/yml/yaml
  • Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置
  • 【Arduino】XIAOFEIYU实验ESP32实验热敏电阻(图文)
  • 23- Redis 主从复制是怎么实现的?
  • 【ai】ubuntu18.04 找不到 nvcc --version问题
  • pdf文档翻译有哪些好的推荐
  • Spring @Cacheable缓存注解用法说明
  • 【Web3】Web3.js 启动!并解决Web3 is not a constructor报错
  • 第十一节:学习通过动态调用application.properties参数配置实体类(自学Spring boot 3.x的第二天)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 4个实用的微服务测试策略
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • es6(二):字符串的扩展
  • Java 网络编程(2):UDP 的使用
  • JavaScript 一些 DOM 的知识点
  • JS数组方法汇总
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Meteor的表单提交:Form
  • PHP的类修饰符与访问修饰符
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 近期前端发展计划
  • 理清楚Vue的结构
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我是如何设计 Upload 上传组件的
  • 用jquery写贪吃蛇
  • 怎样选择前端框架
  • ionic入门之数据绑定显示-1
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • postgresql行列转换函数
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (04)odoo视图操作
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (libusb) usb口自动刷新
  • (办公)springboot配置aop处理请求.
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (九)c52学习之旅-定时器
  • (三)终结任务
  • (十)c52学习之旅-定时器实验
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)WLAN定义和基本架构转
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)VC++中ondraw在什么时候调用的
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net mvc部分视图