Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencegah Limpahan Tindanan dalam `UnmarshalJSON` Go?

Bagaimana untuk Mencegah Limpahan Tindanan dalam `UnmarshalJSON` Go?

Barbara Streisand
Lepaskan: 2024-12-30 19:02:18
asal
362 orang telah melayarinya

How to Prevent Stack Overflow in Go's `UnmarshalJSON`?

Mencegah Limpahan Tindanan dalam UnmarshalJSON dengan Memintas Panggilan Unmarshal

Dalam konteks pelaksanaan UnmarshalJSON tersuai, langkah tambahan mungkin diperlukan semasa permulaan struktur data. Walau bagaimanapun, menggunakan json.Unmarshal() dalam UnmarshalJSON boleh membawa kepada limpahan tindanan kerana penyahkod JSON berulang kali mencari pelaksanaan tersuai, menghasilkan rekursi yang tidak terhingga.

Untuk mengelakkan isu ini, pelaksanaan lalai asas boleh digunakan tanpa mencetuskan gelung rekursif. Begini caranya:

  1. Buat Jenis Perantaraan dengan Kata Kunci Jenis:

    • Tentukan jenis baharu menggunakan kata kunci jenis, seperti jenis orang2 Orang.
  2. Penukaran Jenis dan Tugasan:

    • Gunakan penukaran jenis untuk menetapkan nilai asal kepada jenis baharu, cth., (*orang2)(p). Ini akan mencipta nilai jenis baharu tanpa mewarisi kaedah daripada jenis asas.
  3. Gunakan Fungsi Default Unmarshal:

    • Panggil json.Unmarshal dengan jenis baharu, yang akan menggunakan lalai pelaksanaan.
  4. Pasca Pemprosesan (Pilihan):

    • Lakukan sebarang pasca pemprosesan yang diperlukan selepas pembongkaran lalai, seperti yang dikehendaki oleh adat logik.

Dengan menggunakan teknik ini, gelung rekursif dipecahkan kerana jenis baharu tidak mempunyai kaedah UnmarshalJSON yang ditentukan. Ini menghalang limpahan timbunan dan membolehkan permulaan yang lancar dengan pemprosesan tambahan.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Limpahan Tindanan dalam `UnmarshalJSON` 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