Protobuf文件的编写与使用

文章目录

  • 举例
  • 语法声明
  • 导入其他Proto文件定义
  • 防止多个消息类型命名冲突
  • 定义服务
  • 注释
  • 定义字段
    • 字段规则
      • required
      • optional
      • repeated
      • 默认值
    • 字段类型

举例

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 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

你可能感兴趣的:(Protobuf文件的编写与使用)