Panggil json.Unmarshal Dalam UnmarshalJSON Tanpa Menyebabkan Limpahan Tindanan
Masalah:
Pelaksanaan tersuai bagi UnmarshalJSON panggil json.Unmarshal boleh membawa kepada tindanan melimpah.
Penyelesaian:
Untuk mengelakkan isu limpahan tindanan apabila memanggil json.Unmarshal dalam UnmarshalJSON, gunakan teknik berikut:
Penaakulan:
Menggunakan kata kunci jenis untuk mencipta jenis baharu dengan berkesan mengalih keluar semua kaedah daripada jenis asal. Apabila jenis pembalut digunakan semasa proses unmarshaling, penyahkod JSON tidak akan menemui pelaksanaan UnmarshalJSON tersuai dan akan menggunakan yang lalai. Ini menghalang isu limpahan tindanan.
Contoh:
Pertimbangkan jenis Orang dengan medan Umur:
type Person struct { Name string `json:"name"` Age int `json:"age"` } func (p *Person) UnmarshalJSON(data []byte) error { type personWrapper Person if err := json.Unmarshal(data, (*personWrapper)(p)); err != nil { return err } // Post-processing after unmarshaling: if p.Age < 0 { p.Age = 0 } return nil }
Teknik ini membenarkan tersuai pasca pemprosesan selepas unmarshal, sambil mengelakkan isu limpahan tindanan yang dikaitkan dengan memanggil json.Unmarshal dalam UnmarshalJSON.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Limpahan Tindanan Apabila Memanggil `json.Unmarshal` Dalam `UnmarshalJSON`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!