本博文讲解prototype的学习笔记,内容包含了syntax、option go_package、message、service进行讲解,举例了常见写法。
syntax = "proto3"; // 声明编译器用的是prototype3
package person;
option go_package="/projectRPCTest3/pb/person;person";
message PersonReq{
string name =1;
int32 age = 2;
}
message PersonRes{
string name = 1;
int32 age = 2;
}
service SearchService {
rpc Search(PersonReq) returns (PersonRes);
rpc SearchIn(stream PersonReq) returns(PersonRes);
rpc SearchOut(PersonReq) returns (stream PersonRes);
rpc SearchIO(stream PersonReq) returns (stream PersonRes);
}
1.syntax 声明语法版本
syntax = "proto3";
2.package 给当前的proto分配包名称
package person;
3.option
option go_package = "/projectRPCTest3/pb/person;person";
影响到实际效果是:
- Go 包的路径:
/projectRPCTest3/pb/person
- Go 包名:
person
4.message
message PersonRes{
string name = 1;
int32 age = 2;
}
4.1 切片数组
repeated string hobbies = 3; // 表示多个字符串
repeated int32 scores = 4; // 表示多个整数
4.2 map
map<string, int32> scores = 3; // 例如,保存各科成绩
4.3 类型嵌套
Message User {
int32 id = 1;
string name = 2;
}
Message Student{
int32 id = 1;
User user = 2;
int32 score = 3;
}
5. 消息定义
service SearchService {
rpc Search(PersonReq) returns (PersonRes);
rpc SearchIn(stream PersonReq) returns(PersonRes);
rpc SearchOut(PersonReq) returns (stream PersonRes);
rpc SearchIO(stream PersonReq) returns (stream PersonRes);
}