Mengapakah saya mendapat ralat 'penukaran antara muka: antara muka {} ialah peta[rentetan]antaramuka {}, bukan ralat utama.Data' semasa penyahserikatan JSON?

Linda Hamilton
Lepaskan: 2024-11-14 12:33:02
asal
974 orang telah melayarinya

Why am I getting an

Kegagalan Penukaran Antara Muka semasa Penyahserikatan JSON

Apabila cuba menyahsiri struktur data kompleks daripada JSON, adalah penting untuk memastikan pengendalian antara muka yang betul untuk mengelakkan ralat masa jalan. Pertimbangkan kod berikut:

type Data struct {
    Content string
    Links   []string
}

func main() {
    anInterface := interface{}{/* JSON data here */}

    // Assertion to Data interface
    AData2 := anInterface.(Data)
}
Salin selepas log masuk

Setelah pelaksanaan, atur cara melemparkan ralat:

panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Salin selepas log masuk

Memahami Masalah

Ralat berpunca daripada percubaan untuk menegaskan antara muka yang mengandungi peta pasangan antara muka rentetan terus ke dalam struct Data. Go menjangkakan antara muka mengandungi nilai Data, tetapi kandungan sebenar ialah peta.

Penyelesaian

Untuk menyelesaikan isu ini, adalah penting untuk memahami sifat antara muka . Antara muka hanyalah kontrak yang mentakrifkan satu set kaedah yang mesti dilaksanakan oleh jenis. Untuk menegaskan antara muka kepada jenis tertentu, antara muka mestilah telah diisi sebelum ini dengan nilai jenis itu.

Dalam kes ini, perubahan berikut harus dibuat:

  1. Isi antara muka dengan nilai Data:
anInterface = Data{Content: "hello world", Links: []string{"link1", "link2", "link3"}}
Salin selepas log masuk
  1. Tegaskan antara muka kepada Data:
AData2 = anInterface.(Data)
Salin selepas log masuk

Ini memastikan bahawa antara muka mengandungi jenis yang betul sebelum cuba menukarnya kepada Data.

Pendekatan Alternatif

Pendekatan lain ialah menyahmarshal data JSON secara langsung ke dalam struktur Data yang dikehendaki:

var AData2 Data

err := json.Unmarshal([]byte(jsonStr), &AData2)
if err != nil {
    panic(err)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah saya mendapat ralat 'penukaran antara muka: antara muka {} ialah peta[rentetan]antaramuka {}, bukan ralat utama.Data' semasa penyahserikatan JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan