Protobuf文件的编写与使用

举例

syntax = "proto3";

import public "other.proto";

package go.micro.hello;

service Greeter {
	//Hello请求的定义
	rpc Hello(HelloRequest) returns (HelloResponse) {}
}

message HelloRequest {
	required string name = 1;
	required int32 id = 2;
	optional string email = 3;

	enum PhoneType {
		MOBILE = 0;
		HOME = 1;
		WORK = 2;
	}

	message PhoneNumber {
		required string number = 1;
		optional PhoneType type = 2 [default = HOME];
	}
	
	repeated PhoneNumber phone = 4;
	map<string, PhoneNumber> phoneNums=5;
}

message HelloResponse {
	string greeting = 2;
}

语法声明

文件的第一行声明了后面使用proto3的语法,如果没有该行,程序将默认为proto2的语法。
注意:该行需要是非空非注释的第一行

syntax = "proto3";

导入其他Proto文件定义

import public "other.proto";

public 可选择的属性有weak,public

防止多个消息类型命名冲突

package go.micro.hello;

定义服务

 service Greeter {
    	//Hello请求的定义
    	rpc Hello(HelloRequest) returns (HelloResponse) {}
 }

注释

使用两条斜杠 “//” 即可
或者使用/* … */

//Hello请求的定义

定义字段

required string name = 1;

字段规则

required

一个良好的消息格式至少存在一个这种字段。表示该值是必须要设置的。
数据发送方和接收方都必须处理这个字段。

optional

一个良好的消息格式有0个或1个这种字段(但不超过一个)。
在protobuf处理的时候另外加上了bool变量,用来标记这个字段是否有值,如果有值,那么就会给bool变量标记为true,否则标记为false。

repeated

一个良好的消息格式该字段可以重复任意次数(包括零次)。
在protobuf处理的时候加了count计数变量,用来标记这个字段有多少个。

默认值

如果三种规则都没有定义,那么如果没有携带该字段的消息,那么会以默认值代替。如bool型会以false代替;numeric型会以0代替

字段类型

bool, int32, uint32, bytes, float, double, string, messageType, enumType, map
发布了131 篇原创文章 · 获赞 81 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/wei242425445/article/details/98479413
今日推荐