protobuf语法详解
Go  /  管理员 发布于 1年前   271
protobuf基本语法:
syntax = "proto3";
package test;
option go_package = "/test;test";
message RequestInfo {
int64 number1 = 1;
int64 number2 = 2;
}
syntax = "proto3" 指定 proto3 语法版本,默认为 proto2 语法版本。
package test 设置包名。
option go_package = "/test;test" ; 前设置的是生成 go 文件的路径, ; 后设置的是 go 文件的包名。
定义消息:
1.语法
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
message 定义消息的关键字。
SearchRequest 定义消息名称。
大括号里面设置的是各个字段的类型、名称、标识号。
标识号必须是唯一的。
2.枚举
// 枚举定义
enum Corpus {
CORPUS_UNSPECIFIED = 0;
CORPUS_UNIVERSAL = 1;
}
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 results_per_page = 3;
Corpus corpus = 4; // 枚举使用
}
使用 enum 关键字定义。
proto3 中枚举的第一个枚举值必须是 0。
3.数组
// 定义用户消息类型
message User {
string name = 1;
int32 age = 2;
}
message SearchResponse {
repeated User users = 1; // 返回用户数组
}
使用 repeated 关键字。
repeated 标识该字段可以重复多次,用于表示数组。
4.map
语法:
map<key_type, value_type> field_name = field_number。
key_type 表示 map 键的类型。
value_type 标识 map 值的类型。
// 定义用户消息类型
message User {
string name = 1;
int32 age = 2;
}
message SearchResponse {
map<string, Contact> users = 1; // 定义map类型字段
}
5.默认值
对于字符串,默认值为空字符串。
对于字节,默认值为空字节。
对于布尔类型,默认值为 false。
对于数值类型,默认值为零。对于浮点型和双型, -0.0 和 0.0 被视为等效值,并将往返。
对于枚举,默认值是第一个定义的枚举值值,该值必须为 0。
对于消息字段,未设置该字段。它的确切值是取决于语言。
6.是否必须
optional 表示该字段是可选的。
required 表示该字段是必须的。
// 定义用户消息类型
message User {
required name = 1; // 必须
optional int32 age = 2; // 可选
}
7.其它类型
定义服务
定义一个 RPC 服务的方法,它接受你的 SearchRequest 并返回一个 SearchResponse。
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 results_per_page = 3;
}
message User {
string name = 1;
int32 age = 2;
}
message SearchResponse {
repeated User users = 1; // 返回用户数组
}
service SearchService {
rpc Search(SearchRequest) returns (SearchResponse);
}
service 定义服务的关键字。
SearchService 定义服务名称。
Search 是方法名称。
SearchRequest 是方法的参数。
SearchResponse 是方法的返回值。
导入其它包
可以通过 *import* 其他文件来使用这些文件中的定义。
import "other.proto";
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号