我拿到了一个 proto的名称 和 序列化后的数组. 如何反序列化出来. 例如
name := "proto.HeartBeatReq"
byf :=[] ........
如何创建一个 name 对应的对象,然后反序列化.
相当于实现一个函数
```
func ToObj(name sring , buf []Byte) message{
// how to write this function
}
```
Unmarshal 方法会用,但是需要一个具体对象作为参数. 在go
中该如何创建该对象.
c++ 中是可以做到的. 例如
```
google::protobuf::Message* message = NULL;
const google::protobuf::Descriptor* descriptor =
google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName(typeName);
if (descriptor)
{
const google::protobuf::Message* prototype =
google::protobuf::MessageFactory::generated_factory()->GetPrototype(descriptor);
if (prototype)
{
message = prototype->New();
}
}
return message;
```
和C++一样的,都是要先用protoc以proto文件为输入生成代码,代码里面有各个message的定义以及创建对象的函数,还有各个method的处理函数,最重要的是有一些map将message或method的名称和这些全局函数关联,通过名称找到这些函数然后调用
#1
更多评论
感觉没有明白我的意思, 代码生成了. 基本操作也能操作.
问题在于,命定一个字符串 名字, 如何创建改对象. 就像 知道"int" 创建 int对象. 知道"int32" 创建int32 对象.
如何实现
```
fn createObjByName(string name) pb.Message{
.....
}
```
#2
感觉没有明白我的意思, 代码生成了. 基本操作也能操作.
问题在于,给定一个字符串 名字, 如何创建相关对象. 就像 知道"int" 创建 int对象. 知道"int32" 创建int32 对象.
如何实现
fn createObjByName(string name) pb.Message{
.....
}
#3