Masalah:
Apabila cuba untuk menegaskan antara muka kepada jenis struct tertentu selepas deserializing daripada JSON, ralat dilemparkan menyatakan bahawa antara muka tidak seperti yang diharapkan taip.
Ralat Khusus:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Butiran:
Kod cuba menyahsiri data JSON ke dalam antara muka dan kemudian menegaskan antara muka kepada struct Data. Walau bagaimanapun, pada masa jalanan, Go menjangkakan antara muka ialah [rentetan] antara muka{} peta dan bukannya objek Data.
Penyelesaian:
Penegasan Antara Muka Yang Betul:
Antara muka tidak boleh ditegaskan kepada mana-mana jenis struct sewenang-wenangnya. Ia mesti ditegaskan kepada jenis yang betul yang diwakili oleh antara muka. Dalam kes ini, antara muka hanya boleh ditegaskan kepada struct Data jika ia mula-mula diberikan nilai jenis itu.
Penyingkiran Langsung:
Untuk mengelakkan keperluan untuk penegasan antara muka, ia adalah disyorkan untuk menyahmarshal data JSON secara langsung ke dalam jenis struct yang dikehendaki. Ini memastikan bahawa data ditukar dengan betul tanpa memerlukan penegasan perantaraan.
Contoh Kod:
type Data struct { Content string Links []string } func main() { var AData Data // Deserialize JSON directly into the Data struct err = json.Unmarshal([]byte(value), &AData) if err != nil { panic(err) } }
Dengan menyahkarang data JSON secara langsung ke dalam struct AData, keperluan untuk penegasan antara muka dihapuskan, memastikan penukaran data yang betul.
Atas ialah kandungan terperinci Mengapa Penyahserialisasian JSON Saya Menimbulkan Kegagalan Penegasan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!