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

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


文章目录


一、proto语法

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

二、proto中的标量类型

标量类型 对应go类型 解释
double float64
float float32
int32 int32 使用变长编码,对于负值的效率很低,如果你的域有可能有负值,请使用sint64替代
uint32 uint32 使用变长编码
uint64 uint64 使用变长编码
sint32 int32 使用变长编码,这些编码在负值时比int32高效的多
sint64 int64 使用变长编码,有符号的整型值。编码时比通常的int64高效
fixed32 uint32 总是4个字节,如果数值总是比总是比228大的话,这个类型会比uint32高效
fixed64 uint64 总是8个字节,如果数值总是比总是比256大的话,这个类型会比uint64高效
sfixed32 int32 总是4个字节
sfixed64 int64 总是8个字节
bool bool
string string 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本
bytes []byte 可能包含任意顺序的字节数据

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

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

三、proto中的数组类型

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

示例:

proto 复制代码
message ArrayRequest {
  repeated int64 a1 = 1;
  repeated string a2 = 2;
  repeated Request request_list = 3;
}

对应go类型

go 复制代码
type ArrayRequest struct {
  A1          []int64 
  A2          []string   
  RequestList []*Request
}

四、proto中的Map类型

关键词map键只能是标量类型

示例:

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

对应go类型

go 复制代码
type MapRequest struct {
  MIS   map[int64]string
  MIB   map[string]bool
  MIArr map[string]*ArrayRequest
}

五、proto中的嵌套类型

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

示例:

proto 复制代码
message Q1 {
  message Q2{
    string name2 = 2;
  }
  string name1 = 1;
  Q2 q2 = 2;
}

对应go类型

go 复制代码
type Q1 struct {
  state         protoimpl.MessageState
  sizeCache     protoimpl.SizeCache
  unknownFields protoimpl.UnknownFields

  Name1 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

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

相关推荐
秋の花5 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端8 分钟前
第六章 7.0 LinkList
java·开发语言·网络
可峰科技17 分钟前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
全栈开发圈21 分钟前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
面试鸭25 分钟前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
小白学大数据26 分钟前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
Python大数据分析@29 分钟前
python操作CSV和excel,如何来做?
开发语言·python·excel
@小博的博客33 分钟前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
上海_彭彭1 小时前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
334554321 小时前
element动态表头合并表格
开发语言·javascript·ecmascript