zoukankan      html  css  js  c++  java
  • Protobuf语法

    数据类型

    double: 浮点数
    float: 单精度浮点
    int32: int类型,使用可变长编码,编码负数不够高效,如果有负数那么使用sint32
    sint32: int类型,使用可变长编码, 有符号的整形,比通常的int32高效;
    uint32: 无符号整数 使用可变长编码方式;
    int64 long long , 使用可变长编码方式。编码负数时不够高效——如果有负数,可以使用sint64;
    sint64 long long  使用可变长编码方式。有符号的整型值。编码时比通常的int64高效;
    uint64: 无符号整数 使用可变长编码方式;
    fixed32 : 总是4个字节。如果数值总是比总是比2^28大的话,这个类型会比uint32高效。
    fixed64: 总是8个字节。如果数值总是比总是比2^56大的话,这个类型会比uint64高效。
    sfixed32: 总是4个字节。
    sfixed64: 总是8个字节。
    bool: bool值
    string: 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本。
    bytes: 可能包含任意顺序的字节数据。类似java的ByteString以及 c++ string;

    proto语法

    //注释:和 c/c++ 一样 双斜杠
    syntax = "proto2";    //proto2协议
    
    // 为了防止命令冲突,添加包名,这样不同的语言会使用各自的包来做, 比如 c/c++是名字空间
    package test;    //定义包 package声明符 如:命名空间
    
    //枚举enum
    enum Direction{
        EAST = 1;
        SOUTH = 2;
        WEST = 3;
        NORTH = 4;
    }
    
    //message 定义一个消息类型
    message my_person{    //消息开始
        //字段规则 字段类型 字段名字 字段标识号(从1开始累加)
    
        //required: 表示该值是必须要设置的,一个格式良好的消息一定要含有1个这种字段。
        required bytes name = 1;    //每定义完一个成员 分号结尾
    
        //optional:  可以不用设置, 如果不设置将不会被编码进去,当解 析消息时,如果它不包含optional的元素值,那么解析出来的对象中的对应字段就被置为默认值。
        optional unit32 sex = 2;
    
        //repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。重复的值的顺序会被保留。表示该值可以重复,相当于java中的List, c/c++ vector数组;
        repeated uint32 set = 3; //存放unit3类型的动态数组
    } //消息结束
    
    // message嵌套调用
    message address_book {
        repeated my_person persons = 1; // 人物联系表 链接message my_person 存放my_person类型的动态数组
    }

    proto2和proto3区别

    1: 字段规则移除了 “required”,,“optional”改成了"singular"
    2: 语言增加 Go、Ruby、JavaNano 支持;
    3: 移除了 default 选项, roto3 中,字段的默认值只能根据字段类型由系统决定
    4: 枚举类型的第一个字段必须为 0
    5: 

    • 移除了对分组的支持: 分组的功能完全可以用消息嵌套的方式来实现,并且更清晰。
    • 移除了对扩展的支持,新增了 Any 类型
    • 增加了 JSON 映射特性
  • 相关阅读:
    auth系统与类视图
    中间件和上下文处理器、djangoAdmin
    Django开篇以及环境搭建
    会话保持及Form表单--Form表单
    会话保持及Form表单--cookie、session
    django模型系统综合案例-分页(手动分页、内置分页)
    django模型系统综合案例
    请求与响应
    数据迁移混乱的解决方案与pycharm乱码问题+mysql数据库大小写敏感设置
    django模型系统(三)--多对多,一对一以及跨表查询
  • 原文地址:https://www.cnblogs.com/yifengs/p/15267036.html
Copyright © 2011-2022 走看看