gRPC .proto文件解析

发布时间 2023-12-24 17:35:42作者: _林鹿

.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接口代码