类型定义

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,它包含三个字段querypage_numberresult_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;
}
上一页