请教一个protobuf的反序列化问题.
    我拿到了一个 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;
```