protocol buffer 是谷歌出品的语言独立,平台独立,可扩展的结构化数据序列化的组件就像XML一样,但是protocol buffer编码后更小、速度更快、使用更简单。定义完你的结构化数据后,就可以使用配套工具生成的代码,使用不同的语言对结构化数据流进行读取和操作
,
语法
message <messageName>{
[field rules] <field type> <field name> =<field number>;
}
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
optional Corpus corpus = 4 [default = UNIVERSAL];
}
option allow_alias = true;//允许将同一个field number赋值给多个枚举变量
对于--xx_out参数,protoc在运行时会先去找xx工具,如果没找到会再去找protoc-gen-xx,然后使用对应的工具来生成代码,这里生成的代码不包含service,如何去生成service对应的代码呢,这里就需要指定对应语言工具所带的插件,为什么要指定插件呢,因为RPC有很多种时间方式,通过指定不同的插件来生成不同RPC实现方式的对应代码,good
待填坑
protoc
# 使用protoc-gen-go工具与它携带的grpc插件来生成rpc代码,输入文件为 hello.proto ,输出的目录为 .(当前目录)
protoc --go_out=plugins=grpc: . hello.proto