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

2024-06-29 1435阅读

系列文章目录

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 m_i_s = 1;
        map m_i_b = 2;
        map m_i_arr = 3;
      }
      

      对应go类型

      type MapRequest struct {
        MIS   map[int64]string
        MIB   map[string]bool
        MIArr 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.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

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]