欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > grpc学习golang版( 三、proto文件数据类型 )

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

2025/10/5 12:58:13 来源:https://blog.csdn.net/donkor_/article/details/139977560  浏览:    关键词: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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词