Rumah > pembangunan bahagian belakang > Golang > Mengapakah penegasan antara muka gagal semasa penyahserialisasian JSON?

Mengapakah penegasan antara muka gagal semasa penyahserialisasian JSON?

Patricia Arquette
Lepaskan: 2024-11-24 15:32:16
asal
608 orang telah melayarinya

Why does interface assertion fail during JSON deserialization?

Penegasan Antara Muka Gagal Semasa Penyahserikatan JSON

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
Salin selepas log masuk

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

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