proto3语法

简介

proto3是新版本的protobuf语法。它简化了部分语法,并扩大了支持的语言,Ruby、C#。目前谷歌推荐只在是用新支持的语言或使用新的gRPC框架的时候使用。
proto2和proto3不是完全兼容的。这里列出一些proto2与proto3的区别。

proto3

希望编译器使用proto3进行编译需要在文件对行加上:

syntax = "proto3";

下面是一个简单的例子:

syntax = "proto3";

message Person {
  string name = 1;
  int32 age = 2;
  repeated string loction = 3;
}

可以看到相比于proto2语法这里没有前面的required/optional,在proto3中所有字段都是可选的,同时取消了自定义默认值,默认值为0或空。

枚举

与proto2不同proto3的枚举值第一个值得tag必须为0,同时枚举值的默认值将默认使用第一个值,这样就和其他类型都保持了统一,即默认值为0。

  enum Location {
    SHANGHAI = 0;
    BEIJING = 1;
    GUANGZHOU = 2;
  }

同时proto2的枚举类型不能被proto3直接import,但是间接引用不受影响。

Any

proto3不支持proto2中的extension,但是引入了Any。
在使用Any时需要引入any.proto:

import "google/protobuf/any.proto";

message ErrorStatus {
  string message = 1;
  repeated google.protobuf.Any details = 2;
}
-----------------------
public static void main(String[] args) throws IOException, ClassNotFoundException {
    //定义any
    Any any= Any.pack(StringValue.newBuilder().setValue("aaa").build());
    //赋值并构建
    Demo.Person person=Demo.Person.newBuilder().setDetail(any).build();
    //取值
    System.out.println(person.getDetail().unpack(StringValue.class));
}

其他

proto3去除了proto2中group,新增了一些timestamp、empty的格式(需要手动import)。

转载于:https://www.cnblogs.com/resentment/p/6575617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
proto3语法可以用来定义Protocol Buffers消息格式,以进行跨平台数据交换和通信。proto3语法支持以下语言类型: 1. 基本类型:proto3语法支持以下基本类型: - 数值类型:包括int32、int64、uint32、uint64、sint32、sint64、fixed32、fixed64、sfixed32、sfixed64、float和double。 - 字符串类型:使用string标记。 - 布尔类型:使用bool标记。 - 字节类型:使用bytes标记。 2. 枚举类型:proto3语法支持枚举类型,使用enum关键字定义。枚举类型可以包含一个或多个枚举值,每个枚举值有一个名称和一个整数值。 3. 消息类型:proto3语法支持嵌套的消息类型,使用message关键字进行定义。消息类型可以包含一个或多个字段,每个字段包含一个名称和一个类型。 4. 重复类型:proto3语法支持重复类型,即可以定义重复的字段。重复类型可以用于存储多个相同类型的值,使用repeated关键字进行定义。 5. 嵌入式类型:proto3语法支持将一个消息类型嵌入到另一个消息类型中,以创建更复杂的数据结构。 proto3语法并不依赖于特定的编程语言,而是定义了一种通用的消息格式规范。根据这个规范,在特定的编程语言中可以使用相应的编译器将proto3消息格式编译为该编程语言所支持的数据类型和方法,以实现与不同语言的互操作性。常用的编程语言,如C++、Java、Python等,都有对应的proto3编译器和语言类型支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值