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

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

相关推荐
concisedistinct17 分钟前
大数据开发语言 Scala(四):面向对象编程
大数据·开发语言·后端·scala·编程语言·面向对象
铁匠匠匠17 分钟前
django学习入门系列之第三点《BootSrap初了解》
前端·经验分享·笔记·python·学习·django·前端框架
_Rookie._24 分钟前
java 单例模式
java·开发语言·单例模式
梦中北山41 分钟前
JWT安全分析
开发语言·网络·安全·web安全·php
编程刘明1 小时前
学会拥抱Python六剑客,提高编程效率
开发语言·数据库·python·程序人生·职场和发展·学习方法
不吃饭的猪1 小时前
【无标题】
java·开发语言·docker
不会编程的小孩子1 小时前
python 基础综合应用——小开发
开发语言·python
六月的雨__1 小时前
二手物品交易小程序的设计
java·sql·学习·小程序
scl、1 小时前
AI学习与实践6_AI解场景Agent应用预研demo
人工智能·学习·agent·rag