ProtoBuf v3 语法简介

作者: 谢烟客 | 来源:发表于2017-03-07 18:51 被阅读547次

    syntax

    ProtoBuf 有两个语言版本:v2 与 v3,截止目前在使用 v3 的时候,需要在 *.proto 文件首行中明文标识 syntax:

    person.proto:

    syntax="proto3";
    
    message Person {
        int64 id = 1;
        string name = 2;
    }
    

    如果使用的是 v2 ,在首行可以缺省 syntax 标识,或者指定 syntax="proto2"; 都可以:
    person.proto:

    message Person {
        int64 id = 1;
        string name = 2;
    }
    

    v3 与 v2 在语法上有一些区别例如:v3 去除了 optional、required 等,在语法上更为的简洁,我们这里主要介绍 v3,所以对 v2 就不做过多介绍了。

    message

    message 用来定义一个数据结构

    1. 命名:常规的命名方式建议使用驼峰法,即:HelloWorld 样式
    2. 注释: message 中支持 // 这样的单行注释
    3. repeated 的使用:被 repeated 标识的字段可以理解为是一个数组,示例:
    message Person {
        int64 id = 1;
        string name = 2;
        repeated string skills = 3;  // 这里表示 skills 可以接受多个 string 类型的值
    }
    
    1. enum 类型使用:枚举用来表示一定范围内具有相同属性的值,示例:
    syntax = "proto3";
    message Employee {
        int64 id = 1;
        string name = 2;
        enum Skills {
            GOLANG = 0;
            PYTHON = 1;
            JAVA = 2;
            RUST = 3;
            CPP = 4;
        }
        Skills skill = 3;
    }
    
    1. message 类型的使用: message 在定义过程中是可以声明自己定义的 message 类型,示例:
    syntax = "proto3";
    message Employee {
        int64 id = 1;
        string name = 2;
        Skill skills = 3;  //这里声明的为自定义的 Skill 类型
    }
    message Skill {
        string name = 1;
    }
    
    1. map 类型的使用:message 定义时可以使用 map 类型,示例:
    syntax = "proto3";
    message Employee {
        int64 id = 1;
        string name = 2;
        map<string, Skill> skills = 3;
    }
    message Skill {
        string name = 1;
    }
    

    package

    每个 *.proto 文件可以指定 package 作为生成语言的 namespace,示例:

    syntax = "proto3";
    package exmple;
    message Employee {
        int64 id = 1;
        string name = 2;
        map<string, Skill> skills = 3;
    }
    message Skill {
        string name = 1;
    }
    
    

    相关文章

      网友评论

        本文标题:ProtoBuf v3 语法简介

        本文链接:https://www.haomeiwen.com/subject/dijmgttx.html