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

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

相关推荐
鸥梨菌Honevid4 分钟前
Qt自定义控件(1)——QPaintEvent
开发语言·qt
Code季风7 分钟前
深入比较 Gin 与 Beego:Go Web 框架的两大选择
开发语言·golang·go·gin·beego
板栗焖小鸡9 分钟前
STM32-PWM驱动无源蜂鸣器
stm32·学习
Code季风13 分钟前
Gin 中间件详解与实践
学习·中间件·golang·go·gin
九班长14 分钟前
Golang服务端处理Unity 3D游戏地图与碰撞的详细实现
3d·unity·golang
专注VB编程开发20年1 小时前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode
sealaugh328 小时前
aws(学习笔记第四十八课) appsync-graphql-dynamodb
笔记·学习·aws
黄雪超8 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice9 小时前
对象的finalization机制Test
java·开发语言·jvm
水木兰亭9 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法