從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中文網其他相關文章!