美文网首页程序员
Protobuf3使用-官网搬运

Protobuf3使用-官网搬运

作者: leeyaf | 来源:发表于2017-03-16 12:36 被阅读1022次

    语法

    Message

    syntax = "proto3";
    
    message SearchRequest {
      string query = 1;
      int32 page_number = 2;
      int32 result_per_page = 3;
    }
    

    Field Rules

    repeated querys = 1;
    

    Enumerations

    message SearchRequest {
      string query = 1;
      int32 page_number = 2;
      int32 result_per_page = 3;
      enum Corpus {
        UNIVERSAL = 0;
        WEB = 1;
        IMAGES = 2;
        LOCAL = 3;
        NEWS = 4;
        PRODUCTS = 5;
        VIDEO = 6;
      }
      Corpus corpus = 4;
    }
    

    Other Message Types

    message SearchResponse {
      repeated Result results = 1;
    }
    
    message Result {
      string url = 1;
      string title = 2;
      repeated string snippets = 3;
    }
    

    Importing

    import "myproject/other_protos.proto";
    

    类型

    .proto Type Notes C++ Type Java Type Python Type[2] Go Type Ruby Type C# Type PHP Type
    double double double float float64 Float double float
    float float float float float32 Float float float
    int32 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. int32 int int int32 Fixnum or Bignum (as required) int
    int64 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. int64 long int/long[3] int64 Bignum long
    uint32 Uses variable-length encoding. uint32 int[1] int/long[3] uint32 Fixnum or Bignum (as required) uint
    uint64 Uses variable-length encoding. uint64 long[1] int/long[3] uint64 Bignum ulong
    sint32 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. int32 int int int32 Fixnum or Bignum (as required) int
    sint64 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. int64 long int/long[3] int64 Bignum long
    fixed32 Always four bytes. More efficient than uint32 if values are often greater than 228. uint32 int[1] int uint32 Fixnum or Bignum (as required) uint
    fixed64 Always eight bytes. More efficient than uint64 if values are often greater than 256. uint64 long[1] int/long[3] uint64 Bignum ulong
    sfixed32 Always four bytes. int32 int int int32 Fixnum or Bignum (as required) int integer
    sfixed64 Always eight bytes. int64 long int/long[3] int64 Bignum long integer/string[5]
    bool bool boolean bool bool TrueClass/FalseClass bool boolean
    string A string must always contain UTF-8 encoded or 7-bit ASCII text. string String str/unicode[4] string String (UTF-8) string
    bytes May contain any arbitrary sequence of bytes. string ByteString str []byte String (ASCII-8BIT) ByteString

    默认值

    strings bytes bools numeric types enums message fields
    empty string empty bytes false zero first defined enum value,must be 0 language-dependent

    选项

    • java_package

      option java_package = "com.example.foo";
      
    • java_multiple_files

      option java_multiple_files = true;
      
    • java_outer_classname

      option java_outer_classname = "Ponycopter";
      
    • optimize_for

      • SPEED (default)

      • CODE_SIZE

      • LITE_RUNTIME

        option optimize_for = CODE_SIZE;
        
    • cc_enable_arenas

    • objc_class_prefix

    • deprecated

        int32 old_field = 6 [deprecated=true];
      

    编译

    protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --javanano_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file1.proto path/to/file2.proto path/to/file3.proto
    
    选项 描述
    --proto_path 编译环境的工作目录,跟proto文件中的import有关,跟后面的参数无关。
    --<language>_out 编译后文件输出目录
    <message.proto> 需要编译的proto文件

    Done

    相关文章

      网友评论

        本文标题:Protobuf3使用-官网搬运

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