解组到接口{}并执行类型断言
通过 RabbitMQ 系统接收消息并执行类型断言时,了解这一点很重要由 json 解组的类型package.
默认解组类型
默认情况下,json.Unmarshal 返回以下值类型:
解组转换为接口{}
解组为接口{}时,返回的值将是通用的 map[string]interface{}。要确定映射中的实际类型,您可以:
使用包装器的示例Struct
要避免手动解包数据,请考虑使用如下所示的包装器结构:
type Unpacker struct { Data interface{} } func (u *Unpacker) UnmarshalJSON(b []byte) error { smth1 := &Something1{} err := json.Unmarshal(b, smth1) if err == nil & smth1.Thing != "" { u.Data = smth1 return nil } if _, ok := err.(*json.UnmarshalTypeError); err != nil & !ok { return err } smth2 := &Something2{} err = json.Unmarshal(b, smth2) if err != nil { return err } u.Data = smth2 return nil }
此包装器结构允许您将数据解组为 Something1 或 Something2,具体取决于收到的数据类型。
以上是在 Go 中将 JSON 解组到'interface{}”后如何处理类型断言?的详细内容。更多信息请关注PHP中文网其他相关文章!