6.2 protobuf、grpc

6.2 protobuf、grpc #

1
2
3
4
5
6
7
8
syntax = "proto3";  // proto版本
go_package   // 定义一个go_package

message SearchRequest {   // 数据交换的基本单元 
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
}
  • 数据类型及对应常用语言的类型映射:

    Proto TypeGo TypeRust TypeJava/Kotlin Type[1]Python Type[3]C++ Type
    doublefloat64f64doublefloatdouble
    floatfloat32f32floatfloatfloat
    int32int32i32intintint32_t
    int64int64i64longint/long[4]int64_t
    uint32uint32u32int[2]int/long[4]uint32_t
    uint64uint64u64long[2]int/long[4]uint64_t
    sint32int32i32intintint32_t
    sint64int64i64longint/long[4]int64_t
    fixed32uint32u32int[2]int/long[4]uint32_t
    fixed64uint64u64long[2]int/long[4]uint64_t
    sfixed32int32i32intintint32_t
    sfixed64int64i64longint/long[4]int64_t
    boolboolboolbooleanboolbool
    stringstringProtoStringStringstr/unicode[5]std::string
    bytes[]byteProtoBytesByteStringstr (Python 2), bytes (Python 3)std::string
  • Specifying Field Cardinality

    • repeated
    • map等
  • Defining Services

    1
    2
    3
    
    service SearchService {   // 定义一个服务,包括多个rpc方法
      rpc Search(SearchRequest) returns (SearchResponse);
    }
    
  • 官网: https://grpc.io/

  • 开源中国组织翻译的中文文档: https://doc.oschina.net/grpc