首頁 > 後端開發 > Golang > 為什麼 JSON 反序列化時介面斷言失敗?

為什麼 JSON 反序列化時介面斷言失敗?

Patricia Arquette
發布: 2024-11-24 15:32:16
原創
605 人瀏覽過

Why does interface assertion fail during JSON deserialization?

JSON 反序列化期間介面斷言失敗

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板