protobuf3 Any使用方法

前言

Any 定义的变量就是一个基础类,就像Java中的Object.class。

类似于声明变量,然后可以转成自己需要的任意类

BaseResult.proto 文件

syntax = "proto3";

package cn.api.base;

import "google/protobuf/any.proto";



message BaseResult{
  int32 ret = 1;
  string msg = 2;
  google.protobuf.Any foo = 3;
}

Example 1: Pack and unpack a message in C++.

 Foo foo = ...;
 Any any;
 any.PackFrom(foo);
 ...
 if (any.UnpackTo(&foo)) {
   ...
 }

Example 2: Pack and unpack a message in Java.

 Foo foo = ...;
 Any any = Any.pack(foo);
 ...
 if (any.is(Foo.class)) {
   foo = any.unpack(Foo.class);
 }

Example 3: Pack and unpack a message in Python.

 foo = Foo(...)
 any = Any()
 any.Pack(foo)
 ...
 if any.Is(Foo.DESCRIPTOR):
   any.Unpack(foo)
   ...

Example 4: Pack and unpack a message in Go

  foo := &pb.Foo{...}
  any, err := ptypes.MarshalAny(foo)
  ...
  foo := &pb.Foo{}
  if err := ptypes.UnmarshalAny(any, foo); err != nil {
    ...
  }
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python中使用protobuf的Any类型,你需要先定义和编译两个.proto文件,并使用protoc命令生成对应的Python代码。你可以使用以下命令来编译这两个.proto文件: protoc --python_out=. TransportMessage.proto protoc --python_out=. WeChatOnlineNoticeMessage.proto 接下来,你可以在Python代码中使用protobuf的Any类型。通过在.proto文件中定义Any字段,并使用pack和unpack函数来序列化和反序列化任意类型的数据。 在序列化时,你可以使用pack函数将数据打包成Any类型。例如,假设你有一个message对象msg,你可以使用以下代码将其打包成Any类型的数据: any_message = Any() any_message.Pack(msg) 在反序列化时,你可以使用unpack函数将Any类型的数据解包成原始类型。例如,假设你有一个Any类型的数据any_message,你可以使用以下代码将其解包成原始类型: msg = Message() any_message.Unpack(msg) 注意,解包前需要先创建一个空的Message对象,用于存储解包后的数据。 需要注意的是,使用Any类型需要在.proto文件中引入google.protobuf.Any和google.protobuf.AnyOptions。你可以在.proto文件中添加以下内容: import "google/protobuf/any.proto"; import "google/protobuf/any_options.proto"; 这样就可以在.proto文件中使用Any类型了。 总结起来,要在Python中使用protobuf的Any类型,你需要: 1. 定义和编译.proto文件,生成对应的Python代码; 2. 在.proto文件中引入google.protobuf.Any和google.protobuf.AnyOptions; 3. 在代码中使用pack和unpack函数来序列化和反序列化任意类型的数据。 你可以根据以上步骤来使用protobuf的Any类型。希望对你有所帮助!如果你还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值