类型定义
Protobuf
首先让我们看一个简单的例子 simple.proto:
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
第一行指定 protobuf 的版本,这里是以 proto3 格式定义。你还可以指定为 proto2。如果没有指定,默认以 proto2 格式定义。它定义了一个 message 类型: SearchRequest
,它包含三个字段query
、page_number
、result_per_page
,它会被 protoc 编译成不同的编程语言的相应对象,比如 Java 中的 class、Go 中的 struct 等。
字段是以[ "repeated" ] type fieldName "=" fieldNumber [ "[" fieldOptions "]" ] ";"
格式定义的。这个例子是一个简单的例子,采用了type fieldName "=" fieldNumber
格式定义的。
比如第一个字段query
, 首先是它的类型string
,其次是字段的名称,然后是等号=
, 之后是字段的序号,然后是分号。复杂的结构,前面可以定义为repeated
, 序号之后可以定义一些可选项。
syntax = "proto3";
package fromatob;
// FromAtoB is a simplified version of fromAtoB’s backend API.
service FromAtoB {
rpc Lookup(LookupRequest) returns (Coordinate) {}
}
// A LookupRequest is a request to look up the coordinates for a city by name.
message LookupRequest {
string name = 1;
}
// A Coordinate identifies a location on Earth by latitude and longitude.
message Coordinate {
// Latitude is the degrees latitude of the location, in the range [-90, 90].
double latitude = 1;
// Longitude is the degrees longitude of the location, in the range [-180, 180].
double longitude = 2;
}