如何通过reflect动态创建struct并赋值??

phil.y · · 5084 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我通过protobuf定义了n个message结构,并通过protoc编译生成了对应的struct。 所以在xxx.pb.go中有 typedef name1 struct{......}, typedef name2 struct {...}, ......typedef nameN struct{.....} 现在,我收到了这样一条信息,name, []byte,通过name我知道了对应结构体的名字,通过[]byte我知道了对应结构体序列化后的内容,现在我要生成相应的结构体。 我查了相关资料,步骤如下: ``` package main import ( "fmt" "reflect" ) type Foo struct { name string } type Bar struct { age int } //用于保存实例化的结构体对象 var regStruct map[string]interface{} func main() { str := "Bar" if regStruct[str] != nil { t := reflect.ValueOf(regStruct[str]).Type() v := reflect.New(t).Elem() fmt.Println(v) } } func init() { regStruct = make(map[string]interface{}) regStruct["Foo"] = Foo{} regStruct["Bar"] = Bar{} ``` 这样确实能生成,fmt.Println(v)打印的信息是 {0},但是,根本不能改啊,v.name="ssddf",都报错,能不用说proto.unmarshal(byte, v)了 那么问题来了,我该怎么生成struct并反序列化?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5084 次点击  
加入收藏 微博
3 回复  |  直到 2016-06-02 08:03:32
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传