语法
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文件 |
网友评论