从 JSON 反序列化后尝试断言特定结构类型的接口时,会发生错误:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
出现此问题的原因是对不兼容的类型进行断言。如果接口最初被分配了特定类型的值,则只能将其转换为该类型。
在提供的代码中,接口 anInterface 被分配了数据结构 AData 的值。因此,anInterface 可以安全地断言到 Data。
type Data struct { Content string Links []string } func main() { var AData, AData2 Data var anInterface interface{} // populate data AData.Content = "hello world" AData.Links = []string{"link1", "link2", "link3"} anInterface = AData AData2 = anInterface.(Data) }
相反,如果接口 anInterface 被分配了类型为 map[string]interface{} 的值,则无法断言到 Data。
要将 JSON 数据直接反序列化为数据结构,请使用 json.Unmarshal() 函数。
var AData2 Data err = json.Unmarshal([]byte(value), &AData2) if err != nil { panic(err) }
以上是为什么 JSON 反序列化时接口断言失败?的详细内容。更多信息请关注PHP中文网其他相关文章!