我通过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并反序列化?
有疑问加站长微信联系(非本文作者)