protoBuf语法介绍

生成go文件

一、message类型

1.定义方式

message xxx{
}
  • messages类型有:message,enum 和 service等

  • 一个.proto文件中可以定义多个messages类型,建议一个文件中不要出现多种类型,会导致依赖性膨胀

2.字段定义

optional string stringVal = 1;
1.字段规则:可以忽略,不用指定,默认为optional
    optional:字段可出现 0 次或1次,表示可选,为空可以指定默认值 [default = 10],不然使用语言的默认值
        optional int32 result_per_page = 3 [default = 10];
            字符串默认为空字符串
            数字默认为0
            bool默认为false
            枚举默认为第一个列出的值,一定要注意枚举的顺序,容易有坑
    required:字段只能也必须出现 1 次
    repeated:字段可出现任意多次(包括 0),数组或列表要使用这种
2.类型:
    int32、int64、sint32、sint64、string、32-bit ....
3.字段名称:
    注意命名规范 
4.=后面的数字表示字段编号:
    0 ~ 536870911(除去 19000 到 19999 之间的数字,预留的)


关于optional的说明:
对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,
消息中的其它字段正常处理。---因为optional字段的特性,
很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,
这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,
因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡

 二、enum枚举类型

1定义方式

enum EnumAllowingAlias {
  option allow_alias = true; 
  UNKNOWN = 0;
  STARTED = 1;
  RUNNING = 1;
}

你可以通过为不同的枚举常量指定相同的值来定义别名。
为此,你需要将 allow_alias 选项设置为true,否则 protocol 编译器将在找到别名时生成错误消息。

enum EnumAllowingAlias {
  option allow_alias = true;
  UNKNOWN = 0;
  STARTED = 1;
  RUNNING = 1;
}
enum EnumNotAllowingAlias {
  UNKNOWN = 0;
  STARTED = 1;
}

2.字段定义

UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;

都是常量,没有类型申明

注意:message中可以嵌套enum类型,里层的字段编号和外层的字段编号不冲突

三、service类型

1.定义方式

2.字段定义

四、使用其他 Message 类型

message后面的名称可以在其他的类型中使用,这个时候类型就是指定的类型了

message SearchResponse {
  repeated Result result = 1;   // 这里的类型是下面定的Result类型,包含 Result message的所有
}

message Result {
  required string url = 1;
  optional string title = 2;
  repeated string snippets = 3;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值