程序会收到很多 msg,msg 有不同的结构“Data”,所以我定义了 Msg 结构:
type Msg struct {
MsgType int
Data interface{}
}
type Data1 struct {
//msg type 1 Data struct
}
type Data2 struct {
//msg type 2 Data struct
}
func (msgStr string) {
msg := Msg{}
if err := json.Unmarshal([]byte(msgStr), &msg); err != nil {
//log err
}
switch msg.MsgType{
case 1:
//convert msg.Data to a type 1 struct
case 2:
//convert msg.Data to a type 2 struct
}
}
但是打印出 msg.Data,它是一个映射,而不是 interface{},所以当我通过 msg.Data.(Data1) 将它转换为 Data1 时,出现错误。
那么,
1. 为什么 interface{} 自动转换为 map?
2.如何转换成我想要的Data1结构?
3.这个场景的最佳实践是什么。
翻阅古今
相关分类