Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengelakkan Limpahan Timbunan Apabila Marshaling dan Unmarshaling JSON dalam Go?

Bagaimana untuk Mengelakkan Limpahan Timbunan Apabila Marshaling dan Unmarshaling JSON dalam Go?

Patricia Arquette
Lepaskan: 2024-12-26 18:52:14
asal
637 orang telah melayarinya

How to Avoid Stack Overflow When Marshaling and Unmarshaling JSON in Go?

Marshaling dan Unmarshalling JSON Tanpa Tindanan Limpahan

Dalam pengekodan JSON, memanggil json.Unmarshal dalam kaedah UnmarshalJSON boleh membawa kepada limpahan tindanan. Isu ini timbul kerana penyahkod secara berterusan mencari pelaksanaan UnmarshalJSON tersuai, yang dalam kes ini dipanggil berulang kali.

Untuk mengelakkan perkara ini, penyelesaian biasa ialah mencipta jenis baharu menggunakan kata kunci jenis. Jenis baru ini berkesan sebagai pembungkus untuk jenis asal. Dengan menukar nilai asal kepada jenis baharu dan menghantarnya kepada json.Unmarshal, limpahan tindanan boleh dihalang.

Pendekatan ini cekap kerana penukaran jenis tidak mengubah perwakilan data. Mengikut spesifikasi Go, penukaran jenis bukan angka hanya mengubah suai jenis tanpa mengubah perwakilan asas.

Dalam contoh berikut, jenis Orang ditakrifkan dengan medan Umur angka. Kaedah UnmarshalJSON tersuai memastikan bahawa umur tidak pernah negatif:

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func (p *Person) UnmarshalJSON(data []byte) error {
    type person2 Person
    if err := json.Unmarshal(data, (*person2)(p)); err != nil {
        return err
    }

    // Post-processing after unmarshaling
    if p.Age < 0 {
        p.Age = 0
    }
    return nil
}
Salin selepas log masuk

Teknik ini juga boleh digunakan pada kaedah marshalling tersuai (MarshalJSON) untuk melakukan pra-pemprosesan sebelum penyirian data.

Ingat , apabila mentakrifkan kaedah String() untuk perwakilan teks tersuai, adalah penting untuk membezakan antara menggunakan t dan *t untuk mengelakkan secara tidak sengaja mengubah suai perwakilan rentetan lalai.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Limpahan Timbunan Apabila Marshaling dan Unmarshaling JSON dalam Go?. 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