gRPC .proto文件解析
.proto文件解析
书接上回,创建了hello_grpc.proto文件后对其中参数进行解释,还是以上次的代码为案例
syntax = "proto3";
option go_package="./;hello_grpc";
package hello_grpc;
message Req {
string message = 1;
}
message Res {
string message = 1;
}
service HelloG {
rpc SayHi(Req) returns (Res);
}
1. syntax = "proto3";
protobuf默认支持的版本是2,现在一般使用3版本,所以需要手动指定版本号,如果不这样做,协议缓冲区编译器将默认正在使用proto2,同时这也必须是文件的第一个非空的非注释行
2. option go_package="./;hello_grpc";
go_package选项,用于指定包含所生成代码的Go软件包的完整导入路径,即你最后生成的文件存放位置,hello_grpc
就是生成go文件的包名,和你的.proto文件名相同
3. package hello_grpc;
package关键字指明当前是由hello_grpc包生成go文件,生成之后和包名保持一致,但是如果定义了"option go_package"参数,则package的参数自动失效
☆4. message
通过message关键定义传输数据的格式,类似于go语言中的结构体,是包含一系列类型数据的集合。
许多标准的简单数据类型都可以作为字段类型,包括bool,int32,float,double和string,也可以使用其他message类型作为字段类型,类型结构体的嵌套
message内容详解
string name = 1;
这里的1不是值,而是编号,表示字段1,而且数组不能重复,可以理解为主键id=1
json中是通过成员名称绑定数据,protobuf编码是通过成员唯一编号绑定数据
故protobuf编码后的数据体积会比json编码后的小
☆5. service
如果需要将message与RPC一起使用,则可以在.proto文件中定义RPC服务接口,protobuf编译器将根据你选择的语言生成RPC接口代码