Apabila cuba untuk menegaskan antara muka kepada jenis struct tertentu selepas penyahserikatan daripada JSON, ralat berlaku:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Isu ini timbul kerana penegasan dibuat kepada jenis yang tidak serasi. Antara muka hanya boleh ditukar kepada jenis tertentu jika ia pada asalnya diberikan nilai jenis itu.
Dalam kod yang disediakan, antara muka anInterface diberikan nilai struct Data AData. Oleh itu, anInterface boleh ditegaskan dengan selamat kepada 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) }
Sebaliknya, jika antara muka anInterface telah diberikan nilai jenis peta[rentetan]antara muka{}, ia tidak boleh ditegaskan kepada Data.
Untuk menyahsiri data JSON secara langsung ke dalam struct Data, gunakan json.Unmarshal() fungsi.
var AData2 Data err = json.Unmarshal([]byte(value), &AData2) if err != nil { panic(err) }
Atas ialah kandungan terperinci Mengapakah penegasan antara muka gagal semasa penyahserialisasian JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!